<?xml version="1.0" encoding="UTF-8"?>
<!--

    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.

-->
<suppressions xmlns="https://jeremylong.github.io/DependencyCheck/dependency-suppression.1.3.xsd">
  <!-- add supressions for false-positives detected by OWASP Dependency Check -->
  <suppress>
    <notes>
      apache:http_server is not used.
    </notes>
    <cpe>cpe:/a:apache:http_server</cpe>
  </suppress>
  <suppress>
    <notes>pulsar-zookeeper-utils gets mixed with zookeeper.</notes>
    <gav regex="true">org\.apache\.pulsar:.*</gav>
    <cpe>cpe:/a:apache:zookeeper</cpe>
  </suppress>
  <suppress>
    <notes>kubernetes client doesn't contain CVE-2020-8554</notes>
    <gav regex="true">io\.kubernetes:.*</gav>
    <cve>CVE-2020-8554</cve>
  </suppress>
  <suppress>
    <notes>avro doesn't contain CVE-2019-17195</notes>
    <gav regex="true">org\.apache\.avro:.*</gav>
    <cve>CVE-2019-17195</cve>
  </suppress>
</suppressions>