# 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.
#
# Documentation - These files are never code.
README(\..*)?$, Docs
NOTICE$, Docs
VERSION$, Docs
BUILD$, Docs
DISCLAIMER, Docs
CHANGELOG$, Docs
\.md$, Docs
\.txt$, Docs
\.placeholder$, Empty

# Uncommentable files
#
# These files cannot contain comments, so no header can be added.
# They are nevertheless covered by the Apache license.
\.project$, Apache-2.0
\.cfg$, Apache-2.0
\.json$, Apache-2.0
\.webmanifest, Apache-2.0
\.conf$, Apache-2.0
\.config(\.example)?$, Apache-2.0
/\.bowerrc$, Apache-2.0
\.traffic_ops$, Apache-2.0 # JSON with a specific format.
\.dist$, Apache-2.0 # JSON with a specific format.
traffic_monitor_config\.js$, Apache-2.0 # Actually JSON with a specific format.
CrStates$, Apache-2.0 # JSON with a specific format.
^docs/.*\.(png|jpe?g|ico|gif)$, Apache-2.0
^blueprints/.*\.(png|jpe?g|ico|gif)$, Apache-2.0
favicon.(ico|png)$, Apache-2.0
^traffic_ops/experimental/goto/testFiles/, Apache-2.0
\.pem$, Apache-2.0 # Single certificate file.
traffic_router/core/src/test/resources/api/2.0/cdns/name/thecdn/sslkeys(-missing-1)?, Apache-2.0 #JSON files with no extension
traffic_router/core/src/test/resources/api/2.0/steering*, Apache-2.0
traffic_router/core/src/test/resources/api/2.0/federations/all, Apache-2.0
BUILD_NUMBER$, Apache-2.0

# Images, created for this project or used under an Apache license.
^misc/traffic-control-cdn/images/atc_logo\.png, Apache-2.0
^misc/traffic-control-cdn/images/header_bkgd\.png, Apache-2.0
^misc/traffic-control-cdn/images/main_bkgd\.png, Apache-2.0
^misc/traffic-control-cdn/images/tc_logo\.png, Apache-2.0
^misc/traffic-control-cdn/images/traffic_monitor_logo\.png, Apache-2.0
^misc/traffic-control-cdn/images/traffic_operations_logo\.png, Apache-2.0
^misc/traffic-control-cdn/images/traffic_portal_logo\.png, Apache-2.0
^misc/traffic-control-cdn/images/traffic_router_logo\.png, Apache-2.0
^misc/traffic-control-cdn/images/traffic_stats_logo\.png, Apache-2.0
^misc/logos/ATC-PNG\.png, Apache-2.0
^misc/logos/ATC-PNG-FULL-BLACK\.png, Apache-2.0
^misc/logos/ATC-PNG-FULL-BLACK-LARGE\.png, Apache-2.0
^misc/logos/ATC-PNG-FULL-WHITE\.png, Apache-2.0
^misc/logos/ATC-PNG-FULL-WHITE-LARGE\.png, Apache-2.0
^misc/logos/ATC-PNG-LARGE\.png, Apache-2.0
^misc/logos/ATC-SVG\.sketch, Apache-2.0
^misc/logos/ATC-SVG-FULL\.sketch, Apache-2.0
^misc/logos/page_logos/trafficLogoFactory\.psd, Apache-2.0
^misc/logos/page_logos/traffic_monitor_logo\.png, Apache-2.0
^misc/logos/page_logos/traffic_operations_logo\.png, Apache-2.0
^misc/logos/page_logos/traffic_portal\.png, Apache-2.0
^misc/logos/page_logos/traffic_router_logo\.png, Apache-2.0
^misc/logos/page_logos/traffic_stats_logo\.png, Apache-2.0
^misc/logos/page_logos/traffic_stats_logo_red\.png, Apache-2.0

# Demo certificates
ssl\.(crt|key)$, Apache-2.0
/keystore, Apache-2.0

# Uncommentable files
#
# These files cannot contain comments, but are covered by separate
# licenses. These licenses must be documented in the root LICENSE file.
Inconsolata\.ttf$, SIL OFL 1.1
Inconsolata-Bold\.ttf$, SIL OFL 1.1
[Ff]ont[Aa]wesome[^\.]*\.([ot]tf|eot|woff2?)$, SIL OFL 1.1
Lato-Bold\.ttf$, SIL OFL 1.1
Lato-Regular\.ttf$, SIL OFL 1.1
ssl-bundle\.crt$, MPL
^traffic_portal/app/src/assets/images/sort_, MIT

# Code dependencies
#
# These files could bear headers, but are part of dependent code and
# so we present them for the most part unmodified. These licenses must
# be documented in the root LICENSE file.
[Ff]ont[Aa]wesome[^\.]*\.css, MIT
select2.css, Apache-2.0
select2.css, GPL/LGPL
j[Mm]enu.*\.(css|js), MIT
sphinx_rtd_theme/.*\.(html|css|css\.map|js|py)$, MIT
bootstrap(-theme)?\.css\.map, MIT
datatables\.min, MIT
GeoLite2-City.mmdb.gz, CC-A-SA
jquery\.tree\.min\.css$, MIT
jquery\.dataTables\..*\.(css|js)$, MIT
github\.com/basho/backoff/.*, MIT
github\.com/dchest/siphash/.*, CC0
github\.com/pkg/errors\..*, BSD
traffic_portal/app/src/assets/js/chartjs/angular-chart\..*, BSD
traffic_portal/app/src/assets/css/jsonformatter\..*, Apache-2.0
traffic_portal/app/src/assets/js/jsonformatter\..*, Apache-2.0
traffic_portal/app/src/assets/js/fast-json-patch.*, MIT
traffic_portal/app/src/assets/css/angular-ui-tree\..*, MIT
traffic_portal/app/src/assets/js/angular-ui-tree\..*, MIT
traffic_portal/app/src/assets/css/colReorder.dataTables\..*, MIT
traffic_portal/app/src/assets/js/colReorder.dataTables\..*, MIT
traffic_portal/app/src/assets/js/dataTables.buttons\..*, MIT
traffic_portal/app/src/assets/js/buttons.html5\..*, MIT
traffic_ops/traffic_ops_golang/vendor/github\.com/dgrijalva/.*, MIT
traffic_ops/traffic_ops_golang/vendor/github\.com/lestrrat-go/.*, MIT
traffic_ops_ort/vendor/github\.com/gofrs/flock/.*, BSD
traffic_ops_ort/vendor/github\.com/pborman/getopt/.*, BSD

# Ignored - Do not report.
\.DS_Store, Ignore # Created automatically OSX.

# This file is created dynamically by the testing script itself, it is
# not distributed, but if it were, it would be Apache, and the source
# would be right with it.
^infrastructure/test/license/license, Apache-2.0

# Don't object to licenses in the license file itself.
^LICENSE$, !GoBSD
^LICENSE$, !MIT
^LICENSE$, !BSD
^LICENSE$, !X11
^LICENSE$, !ISC

# ... or in the documentation about the licenses.
^infrastructure/test/license/README.md$, !BSD
^infrastructure/test/license/README.md$, !GPL/LGPL
^infrastructure/test/license/README.md$, !MIT
^infrastructure/test/license/README.md$, !WTFPL
^infrastructure/test/license/README.md$, !X11

# License files are licensed under their own terms, don't attempt to detect them.
^licenses/.*, Ignore

# False positives
licenseList\.go$, !GoBSD
licenseList\.go$, !MIT
licenseList\.go$, !BSD
licenseList\.go$, !X11
^traffic_ops/app/t_integration/extensions\.t$, !X11
GeoLite2-City.mmdb.gz, !MIT
