// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// ignore_for_file: use_raw_strings, prefer_interpolation_to_compose_strings

// COMMON PATTERNS

const String kIndent = r'^((?:[-;@#<!.\\"/* ]*(?:REM[-;@#<!.\\"/* ]*)?[-;@#<!.\"/*]+)?)( *)';

final RegExp stripDecorations = RegExp(
  r'^((?:(?:[-;@#<!.\\"/* ]*(?:REM[-;@#<!.\\"/* ]*)?[-;@#<!.\"/*]+)?)(?:(?: |\t)*))(.*?)[ */]*$',
  multiLine: true,
  caseSensitive: false
);

final RegExp newlinePattern = RegExp(r'\r\n?');

final RegExp beginLicenseBlock = RegExp(
  r'^([#;/* ]*) (?:\*\*\*\*\* BEGIN LICENSE BLOCK \*\*\*\*\*[ */]*'
                r'|@APPLE_LICENSE_HEADER_START@)$'
);

final RegExp endLicenseBlock = RegExp(
  r'^([#;/* ]*) (?:\*\*\*\*\* END LICENSE BLOCK \*\*\*\*\*[ */]*'
                r'|@APPLE_LICENSE_HEADER_END@)$'
);

final RegExp nonSpace = RegExp('[^ ]');
final RegExp trailingComma = RegExp(r',[ */]*$');
final RegExp trailingColon = RegExp(r':(?: |\*|/|\n|=|-)*$');
final RegExp copyrightMentionPattern = RegExp(r'©| \(c\) (?!{)|copy\s*right\b|copy\s*left', caseSensitive: false);
final RegExp licenseMentionPattern = RegExp(r'license|warrant[iy]', caseSensitive: false);
final RegExp copyrightMentionOkPattern = RegExp(
  // if a (multiline) block matches this, we ignore it even if it matches copyrightMentionPattern/licenseMentionPattern
  r'(?:These are covered by the following copyright:'
     r'|^((?:[-;#<!.\\"/* ]*(?:REM[-;#<!.\\"/* ]*)?[-;#<!.\"/*]+)?)((?: |\t)*)COPYRIGHT: *\r?\n'
     r'|copyright.*\\n"' // clearly part of a string
     r'|\$YEAR' // clearly part of a template string
     r'|LICENSE BLOCK' // MPL license block header/footer
     r'|2117.+COPYRIGHT' // probably U+2117 mention...
     r'|// The copyright below was added in 2009, but I see no record'
     r'|This ICU code derived from:'
     r'|the contents of which are also included in zip.h' // seen in minizip's unzip.c, but the upshot of the crazy license situation there is that we don't have to do anything
     r'|hold font names, copyright info, notices, etc' // seen in a comment in freetype's src/include/ftsnames.h
     r'|' // the following is from android_tools/ndk/sources/cxx-stl/gnu-libstdc++/4.9/include/ext/pb_ds/detail/splay_tree_/splay_tree_.hpp
     r'^ \* This implementation uses an idea from the SGI STL \(using a @a header node\n'
     r'^ \*    which is needed for efficient iteration\)\. Following is the SGI STL\n'
     r'^ \*    copyright\.\n'
  r')',
  caseSensitive: false, multiLine: true);
final RegExp halfCopyrightPattern = RegExp(r'^(?:Copyright(?: \(c\))? [-0-9, ]+(?: by)?|Written [0-9]+)[ */]*$', caseSensitive: false);
final RegExp authorPattern = RegExp(r'Copyright .+(The .+ Authors)\. +All rights reserved\.', caseSensitive: false);

// copyright blocks start with the first line matching this
final List<RegExp> copyrightStatementLeadingPatterns = <RegExp>[
  RegExp(r'^ *(?:Portions(?: are)? )?Copyright .+$', caseSensitive: false),
  RegExp(r'^.*All rights? reserved\.$', caseSensitive: false),
  RegExp(r'^ *\(C\) .+$', caseSensitive: false),
  RegExp(r'^:copyright: .+$', caseSensitive: false),
  RegExp(r'[-_a-zA-Z0-9()]+ function provided freely by .+'),
  RegExp(r'^.+ optimized code \(C\) COPYRIGHT .+$', caseSensitive: false),
  RegExp(r'©'),

  // TODO(ianh): I wish there was a way around including the next few lines so many times in the output:
  RegExp(r"^This file (?:is|was) part of the Independent JPEG Group's software[:.]$"),
  RegExp(r'^It was modified by The libjpeg-turbo Project to include only code$'),
  RegExp(r'^relevant to libjpeg-turbo\.$'),
  RegExp(r'^It was modified by The libjpeg-turbo Project to include only code relevant$'),
  RegExp(r'^to libjpeg-turbo\.$'),
  RegExp(r'^It was modified by The libjpeg-turbo Project to include only code and$'),
  RegExp(r'^information relevant to libjpeg-turbo\.$'),
];

// copyright blocks end with the last line that matches this, rest is considered license
final List<RegExp> copyrightStatementPatterns = <RegExp>[
  RegExp(r'^ *(?:Portions(?: created by the Initial Developer)?(?: are)? )?Copyright .+$', caseSensitive: false),
  RegExp(r'^\(Version [-0-9.:, ]+ Copyright .+\)$', caseSensitive: false),
  RegExp(r'^.*(?:All )?rights? reserved\.$', caseSensitive: false),
  RegExp(r'^ *\(C\) .+$', caseSensitive: false),
  RegExp(r'^:copyright: .+$', caseSensitive: false),
  RegExp(r'^ *[0-9][0-9][0-9][0-9].+ [<(].+@.+[)>]$'),
  RegExp(r'^                   [^ ].* [<(].+@.+[)>]$'), // that's exactly the number of spaces to line up with the X if "Copyright (c) 2011 X" is on the previous line
  RegExp(r'^ *and .+$', caseSensitive: false),
  RegExp(r'^ *others\.?$', caseSensitive: false),
  RegExp(r'^for more details\.$', caseSensitive: false),
  RegExp(r'^ *For more info read ([^ ]+)$', caseSensitive: false),
  RegExp(r'^ *For terms of use, see ([^ ]+)$', caseSensitive: false),
  RegExp(r'^(?:Google )?Author\(?s?\)?: .+', caseSensitive: false),
  RegExp(r'^Written by .+', caseSensitive: false),
  RegExp(r'^Originally written by .+', caseSensitive: false),
  RegExp(r'^Based on$', caseSensitive: false),
  RegExp(r"^based on (?:code in )?['`][^'`]+['`]$", caseSensitive: false),
  RegExp(r'^Based on .+, written by .+, [0-9]+\.$', caseSensitive: false),
  RegExp(r'^(?:Based on the )?x86 SIMD extension for IJG JPEG library(?: - version [0-9.]+|,)?$'),
  RegExp(r'^This software originally derived from .+\.$'),
  RegExp(r'^Derived from [a-z._/]+$'),
  RegExp(r'^Derived from .+, which was$'),
  RegExp(r'^ *This is part of .+, a .+ library\.$'),
  RegExp(r'^This file is part of [^ ]+\.$'),
  RegExp(r'^(?:Modification )?[Dd]eveloped [-0-9]+ by .+\.$', caseSensitive: false),
  RegExp(r'^Modified .+[:.]$', caseSensitive: false),
  RegExp(r'^(?:[^ ]+ )?Modifications:$', caseSensitive: false),
  RegExp(r'^ *Modifications for', caseSensitive: false),
  RegExp(r'^ *Modifications of', caseSensitive: false),
  RegExp(r'^Last changed in .+$', caseSensitive: false),
  RegExp(r'[-_a-zA-Z0-9()]+ function provided freely by .+'), // TODO(ianh): file a bug on analyzer about what happens if you omit this comma
  RegExp(r'^.+ optimized code \(C\) COPYRIGHT .+$', caseSensitive: false),
  RegExp(r'^\(Royal Institute of Technology, Stockholm, Sweden\)\.$'),
  RegExp(r'^\(?https?://[^ ]+$\)?'),

  RegExp(r'^The Original Code is Mozilla Communicator client code, released$'),
  RegExp(r'^March 31, 1998.$'), // mozilla first release date

  RegExp(r'^The Elliptic Curve Public-Key Crypto Library \(ECC Code\) included$'),
  RegExp(r'^herein is developed by SUN MICROSYSTEMS, INC\., and is contributed$'),
  RegExp(r'^to the OpenSSL project\.$'),

  RegExp(r'^This code is derived from software contributed to The NetBSD Foundation$'),
  RegExp(r'^by (?:Atsushi Onoe|Dieter Baron|Klaus Klein|Luke Mewburn|Thomas Klausner|,| |and)*\.$'),

  RegExp(r'^FT_Raccess_Get_HeaderInfo\(\) and raccess_guess_darwin_hfsplus\(\) are$'),
  RegExp(r'^derived from ftobjs\.c\.$'),

  // TODO(ianh): I wish there was a way around including the next few lines so many times in the output:
  RegExp(r"^This file (?:is|was) part of the Independent JPEG Group's software[:.]$"),
  RegExp(r'^It was modified by The libjpeg-turbo Project to include only code$'),
  RegExp(r'^relevant to libjpeg-turbo\.$'),
  RegExp(r'^It was modified by The libjpeg-turbo Project to include only code relevant$'),
  RegExp(r'^to libjpeg-turbo\.$'),
  RegExp(r'^It was modified by The libjpeg-turbo Project to include only code and$'),
  RegExp(r'^information relevant to libjpeg-turbo\.$'),

  RegExp(r'^All or some portions of this file are derived from material licensed$'),
  RegExp(r'^to the University of California by American Telephone and Telegraph$'),
  RegExp(r'^Co\. or Unix System Laboratories, Inc\. and are reproduced herein with$'),
  RegExp(r'^the permission of UNIX System Laboratories, Inc.$'),

  RegExp(r'^This software was developed by the Computer Systems Engineering group$'),
  RegExp(r'^at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and$'),
  RegExp(r'^contributed to Berkeley\.$'),

  RegExp(r'^This code is derived from software contributed to Berkeley by$'),
  RegExp(r'^Ralph Campbell\. +This file is derived from the MIPS RISC$'),
  RegExp(r'^Architecture book by Gerry Kane\.$'),

  RegExp(r'^All advertising materials mentioning features or use of this software$'),
  RegExp(r'^must display the following acknowledgement:$'),
  RegExp(r'^This product includes software developed by the University of$'),
  RegExp(r'^California, Lawrence Berkeley Laboratory\.$'),

  RegExp(r'^ *Condition of use and distribution are the same than zlib :$'),
  RegExp(r'^The MIT License:$'),

  RegExp(r'^$'), // TODO(ianh): file an issue on what happens if you omit the close quote

];

// patterns that indicate we're running into another license
final List<RegExp> licenseFragments = <RegExp>[
  RegExp(r'"as is" without express or implied warranty\.'),
  RegExp(r'version of this file under any of the LGPL, the MPL or the GPL\.'),
  RegExp(r'SUCH DAMAGE\.'),
  RegExp(r'found in the LICENSE file'),
  RegExp(r'<http://www\.gnu\.org/licenses/>'),
  RegExp(r'License & terms of use'),
];

const String _linebreak      = r' *(?:(?:\*/ *|[*#])?(?:\r?\n\1 *(?:\*/ *)?)*\r?\n\1\2 *)?';
const String _linebreakLoose = r' *(?:(?:\*/ *|[*#])?\r?\n(?:-|;|#|<|!|/|\*| |REM)*)*';

// LICENSE RECOGNIZERS

final RegExp lrApache = RegExp(r'^(?: |\r|\n)*Apache License\b');
final RegExp lrMPL = RegExp(r'^(?: |\r|\n)*Mozilla Public License Version 2\.0\n');
final RegExp lrGPL = RegExp(r'^(?: |\r|\n)*GNU GENERAL PUBLIC LICENSE\n');
final RegExp lrAPSL = RegExp(r'^APPLE PUBLIC SOURCE LICENSE Version 2\.0 +- +August 6, 2003');
final RegExp lrMIT = RegExp(r'Permission(?: |\n)+is(?: |\n)+hereby(?: |\n)+granted,(?: |\n)+free(?: |\n)+of(?: |\n)+charge,(?: |\n)+to(?: |\n)+any(?: |\n)+person(?: |\n)+obtaining(?: |\n)+a(?: |\n)+copy(?: |\n)+of(?: |\n)+this(?: |\n)+software(?: |\n)+and(?: |\n)+associated(?: |\n)+documentation(?: |\n)+files(?: |\n)+\(the(?: |\n)+"Software"\),(?: |\n)+to(?: |\n)+deal(?: |\n)+in(?: |\n)+the(?: |\n)+Software(?: |\n)+without(?: |\n)+restriction,(?: |\n)+including(?: |\n)+without(?: |\n)+limitation(?: |\n)+the(?: |\n)+rights(?: |\n)+to(?: |\n)+use,(?: |\n)+copy,(?: |\n)+modify,(?: |\n)+merge,(?: |\n)+publish,(?: |\n)+distribute,(?: |\n)+sublicense,(?: |\n)+and/or(?: |\n)+sell(?: |\n)+copies(?: |\n)+of(?: |\n)+the(?: |\n)+Software,(?: |\n)+and(?: |\n)+to(?: |\n)+permit(?: |\n)+persons(?: |\n)+to(?: |\n)+whom(?: |\n)+the(?: |\n)+Software(?: |\n)+is(?: |\n)+furnished(?: |\n)+to(?: |\n)+do(?: |\n)+so,(?: |\n)+subject(?: |\n)+to(?: |\n)+the(?: |\n)+following(?: |\n)+conditions:');
final RegExp lrOpenSSL = RegExp(r'Copyright \(c\) 1998-2011 The OpenSSL Project\.  All rights reserved\.(.|\n)*Original SSLeay License');
final RegExp lrBSD = RegExp(r'Redistribution(?: |\n)+and(?: |\n)+use(?: |\n)+in(?: |\n)+source(?: |\n)+and(?: |\n)+binary(?: |\n)+forms(?:(?: |\n)+of(?: |\n)+the(?: |\n)+software(?: |\n)+as(?: |\n)+well(?: |\n)+as(?: |\n)+documentation)?,(?: |\n)+with(?: |\n)+or(?: |\n)+without(?: |\n)+modification,(?: |\n)+are(?: |\n)+permitted(?: |\n)+provided(?: |\n)+that(?: |\n)+the(?: |\n)+following(?: |\n)+conditions(?: |\n)+are(?: |\n)+met:');
final RegExp lrZlib = RegExp(r'Permission(?: |\n)+is(?: |\n)+granted(?: |\n)+to(?: |\n)+anyone(?: |\n)+to(?: |\n)+use(?: |\n)+this(?: |\n)+software(?: |\n)+for(?: |\n)+any(?: |\n)+purpose,(?: |\n)+including(?: |\n)+commercial(?: |\n)+applications,(?: |\n)+and(?: |\n)+to(?: |\n)+alter(?: |\n)+it(?: |\n)+and(?: |\n)+redistribute(?: |\n)+it(?: |\n)+freely,(?: |\n)+subject(?: |\n)+to(?: |\n)+the(?: |\n)+following(?: |\n)+restrictions:');
final RegExp lrPNG = RegExp(r'This code is released under the libpng license\.');
final RegExp lrBison = RegExp(r'This special exception was added by the Free Software Foundation in *\n *version 2.2 of Bison.');


// "NO COPYRIGHT" STATEMENTS

final List<RegExp> csNoCopyrights = <RegExp>[

  // used with _tryNone
  // groups are ignored

  // Seen in Android NDK
  RegExp(
    r'^[/* ]*This header was automatically generated from a Linux kernel header\n'
    r'^[/* ]*of the same name, to make information necessary for userspace to\n'
    r'^[/* ]*call into the kernel available to libc.  It contains only constants,\n'
    r'^[/* ]*structures, and macros generated from the original header, and thus,\n'
    r'^[/* ]*contains no copyrightable information.',
    multiLine: true,
    caseSensitive: false
  ),

  RegExp(
    kIndent +
    r'These constants were taken from version 3 of the DWARF standard, *\n'
    r'^\1\2which is Copyright \(c\) 2005 Free Standards Group, and *\n'
    r'^\1\2Copyright \(c\) 1992, 1993 UNIX International, Inc\. *\n',
    multiLine: true,
    caseSensitive: false
  ),

  // Freetype
  RegExp(
    kIndent +
    (r'This is a dummy file, used to please the build system\. It is never included by the auto-fitter sources\.'.replaceAll(' ', _linebreak)),
    multiLine: true,
    caseSensitive: false
  ),

  // Freetype
  RegExp(
    kIndent +
    (
      r'This software was written by Alexander Peslyak in 2001\. No copyright is '
      r'claimed, and the software is hereby placed in the public domain\. In case '
      r'this attempt to disclaim copyright and place the software in the public '
      r'domain is deemed null and void, then the software is Copyright \(c\) 2001 '
      r'Alexander Peslyak and it is hereby released to the general public under the '
      r'following terms: Redistribution and use in source and binary forms, with or '
      r"without modification, are permitted\. There\'s ABSOLUTELY NO WARRANTY, "
      r'express or implied\.(?: \(This is a heavily cut-down "BSD license"\.\))?'
      .replaceAll(' ', _linebreak)
    ),
    multiLine: true,
    caseSensitive: false
  ),

];


// ATTRIBUTION STATEMENTS

final List<RegExp> csAttribution = <RegExp>[

  // used with _tryAttribution
  // group 1 is the prefix, group 2 is the attribution

  // Seen in musl in Android SDK
  RegExp(
    r'^([/* ]*)This code was written by (.+) in [0-9]+; no copyright is claimed\.\n'
    r'^\1This code is in the public domain\. +Attribution is appreciated but\n'
    r'^\1unnecessary\.',
    multiLine: true,
    caseSensitive: false
  ),

];


// REFERENCES TO OTHER FILES

class LicenseFileReferencePattern {
  LicenseFileReferencePattern({
    this.firstPrefixIndex,
    this.indentPrefixIndex,
    this.copyrightIndex,
    this.authorIndex,
    this.fileIndex,
    this.pattern,
    this.needsCopyright = true
  });
  final int? firstPrefixIndex;
  final int? indentPrefixIndex;
  final int? copyrightIndex;
  final int? authorIndex;
  final int? fileIndex;
  final bool needsCopyright;
  final RegExp? pattern;
}

final List<LicenseFileReferencePattern> csReferencesByFilename = <LicenseFileReferencePattern>[

  // used with _tryReferenceByFilename

  // libpng files
  LicenseFileReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    fileIndex: 3,
    pattern: RegExp(
      kIndent +
      r'This code is released under the libpng license. For conditions of distribution and use, see the disclaimer and license in (png.h)\b'.replaceAll(' ', _linebreak),
      multiLine: true,
      caseSensitive: false
    ),
  ),

  // typical of much Google-written code
  LicenseFileReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    fileIndex: 3,
    pattern: RegExp(
      kIndent +
      r'Use of this source(?: code)? is governed by a BS?D-style license that can be found in the '.replaceAll(' ', _linebreak) +
      r'([^ ]+) file\b(?! or at)',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // Chromium's zlib extensions.
  LicenseFileReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    copyrightIndex: 3,
    authorIndex: 4,
    fileIndex: 5,
    pattern: RegExp(
      kIndent +
      // The " \* " is needed to ensure that both copyright lines start with
      // the comment decoration in the captured match, otherwise it won't be
      // stripped from the second line when generating output.
      r'((?: \* Copyright \(C\) 2017 ARM, Inc.\n)?'
      r'Copyright .+(The .+ Authors)\. +All rights reserved\.)\n'
      r'Use of this source code is governed by a BSD-style license that can be\n'
      r'found in the Chromium source repository ([^ ]+) file.'.replaceAll(r'\n', _linebreakLoose),
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // Mojo code
  LicenseFileReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    copyrightIndex: 3,
    authorIndex: 4,
    fileIndex: 5,
    pattern: RegExp(
      kIndent +
      r'(Copyright .+(the .+ authors)\. +All rights reserved.) +' +
      r'Use of this source(?: code)? is governed by a BS?D-style license that can be found in the '.replaceAll(' ', _linebreak) +
      r'([^ ]+) file\b(?! or at)',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // ANGLE .json files
  LicenseFileReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    copyrightIndex: 3,
    authorIndex: 4,
    fileIndex: 5,
    pattern: RegExp(
      kIndent +
      r'(Copyright .+(The .+ Authors)\. +All rights reserved.)", *\n'
      r'^\1\2Use of this source code is governed by a BSD-style license that can be", *\n'
      r'^\1\2found in the ([^ ]+) file.",',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // typical of Dart-derived files
  LicenseFileReferencePattern(
    firstPrefixIndex: 2,
    indentPrefixIndex: 3,
    copyrightIndex: 1,
    authorIndex: 4,
    fileIndex: 5,
    pattern: RegExp(
      r'(' + kIndent +
      r'Copyright .+(the .+ authors)\[?\. '
      r'Please see the AUTHORS file for details. All rights (?:re|solve)served\.) '
      r'Use of this source(?: code)? is governed by a BS?D-style license '
      r'that can be found in the '.replaceAll(' ', _linebreakLoose) +
      r'([^ ]+) file\b(?! or at)',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // Seen in libjpeg-turbo
  LicenseFileReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    fileIndex: 3,
    pattern: RegExp(
      kIndent + r'For conditions of distribution and use, see (?:the accompanying|copyright notice in)? ([-_.a-zA-Z0-9]+)',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // Seen in FreeType software
  LicenseFileReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    fileIndex: 3,
    pattern: RegExp(
      kIndent +
      r'This file (?:is part of the FreeType project, and )?may only be used,? '
      r'modified,? and distributed under the terms of the FreeType project '
      r'license, (LICENSE\.TXT). By continuing to use, modify, or distribute this '
      r'file you indicate that you have read the license and understand and '
      r'accept it fully\.'.replaceAll(' ', _linebreak),
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // Seen in FreeType cff software from Adobe
  LicenseFileReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    fileIndex: 3,
    pattern: RegExp(
      kIndent +
      r'This software, and all works of authorship, whether in source or '
      r'object code form as indicated by the copyright notice\(s\) included '
      r'herein \(collectively, the "Work"\) is made available, and may only be '
      r'used, modified, and distributed under the FreeType Project License, '
      r'(LICENSE\.TXT)\. Additionally, subject to the terms and conditions of the '
      r'FreeType Project License, each contributor to the Work hereby grants '
      r'to any individual or legal entity exercising permissions granted by '
      r'the FreeType Project License and this section \(hereafter, "You" or '
      r'"Your"\) a perpetual, worldwide, non-exclusive, no-charge, '
      r'royalty-free, irrevocable \(except as stated in this section\) patent '
      r'license to make, have made, use, offer to sell, sell, import, and '
      r'otherwise transfer the Work, where such license applies only to those '
      r'patent claims licensable by such contributor that are necessarily '
      r'infringed by their contribution\(s\) alone or by combination of their '
      r'contribution\(s\) with the Work to which such contribution\(s\) was '
      r'submitted\. If You institute patent litigation against any entity '
      r'\(including a cross-claim or counterclaim in a lawsuit\) alleging that '
      r'the Work or a contribution incorporated within the Work constitutes '
      r'direct or contributory patent infringement, then any patent licenses '
      r'granted to You under this License for that Work shall terminate as of '
      r'the date such litigation is filed\. '
      r'By using, modifying, or distributing the Work you indicate that you '
      r'have read and understood the terms and conditions of the '
      r'FreeType Project License as well as those provided in this section, '
      r'and you accept them fully\.'.replaceAll(' ', _linebreak),
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // Seen in Jinja files
  LicenseFileReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    fileIndex: 3,
    pattern: RegExp(
      kIndent + r':license: [A-Z0-9]+, see (.+) for more details\.',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // Seen in modp_b64
  LicenseFileReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    fileIndex: 3,
    pattern: RegExp(
      kIndent + r'Released under [^ ]+ license\. +See ([^ ]+) for details\.$',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // Seen in libxml files
  LicenseFileReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    fileIndex: 3,
    pattern: RegExp(
      kIndent + r'(?:Copy: )?See ([A-Z0-9]+) for the status of this software\.?',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // Seen in libxml files
  LicenseFileReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    fileIndex: 3,
    needsCopyright: false,
    pattern: RegExp(
      kIndent +
      r'// This file is dual licensed under the MIT and the University of Illinois Open *\n'
      r'^\1\2// Source Licenses. See (LICENSE\.TXT) for details\.',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // BoringSSL
  LicenseFileReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    fileIndex: 3,
    pattern: RegExp(
      kIndent +
      r'Licensed under the OpenSSL license \(the "License"\)\. You may not use '
      r'this file except in compliance with the License\. You can obtain a copy '
      r'in the file (LICENSE) in the source distribution or at '
      r'https://www\.openssl\.org/source/license\.html'
      .replaceAll(' ', _linebreak),
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // Seen in Fuchsia SDK files
  LicenseFileReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    fileIndex: 3,
    needsCopyright: false,
    pattern: RegExp(
      kIndent +
      r'Copyright .+\. All rights reserved\. '
      r'This is a GENERATED file, see //zircon/.+/abigen\. '
      r'The license governing this file can be found in the (LICENSE) file\.'
      .replaceAll(' ', _linebreak),
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // Seen in Fuchsia SDK files.
  // TODO(chinmaygarde): This is a broken license file that is being patched
  // upstream. Remove this once DX-1477 is patched.
  LicenseFileReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    fileIndex: 3,
    needsCopyright: false,
    pattern: RegExp(
      kIndent +
      r'Use of this source code is governed by a BSD-style license that can be '
      r'Copyright .+\. All rights reserved\. '
      r'found in the (LICENSE) file\.'
      .replaceAll(' ', _linebreak),
      multiLine: true,
      caseSensitive: false,
    )
  ),

];


// INDIRECT REFERENCES TO OTHER FILES

final List<RegExp> csReferencesByType = <RegExp>[

  // used with _tryReferenceByType
  // groups 1 and 2 are the prefix, group 3 is the license type

  // Seen in Jinja files, markupsafe files
  RegExp(
    kIndent + r':license: ([A-Z0-9]+)',
    multiLine: true,
    caseSensitive: false
  ),

  RegExp(
    kIndent +
    r'This software is made available under the terms of the (ICU) License -- ICU 1\.\8\.1 and later\.'.replaceAll(' ', _linebreak),
    multiLine: true,
    caseSensitive: false
  ),

  RegExp(
    kIndent +
    (
      r'(?:@APPLE_LICENSE_HEADER_START@)? '
      r'This file contains Original Code and/or Modifications of Original Code '
      r'as defined in and that are subject to the (Apple Public Source License) '
      r"Version (2\.0) \(the 'License'\)\. You may not use this file except in "
      r'compliance with the License\. Please obtain a copy of the License at '
      r'(http://www\.opensource\.apple\.com/apsl/) and read it before using this '
      r'file\. '
      r'The Original Code and all software distributed under the License are '
      r"distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER "
      r'EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, '
      r'INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, '
      r'FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT\. '
      r'Please see the License for the specific language governing rights and '
      r'limitations under the License\.'
      r'(?:@APPLE_LICENSE_HEADER_END@)? '
      .replaceAll(' ', _linebreak)
    ),
    multiLine: true,
    caseSensitive: false
  ),

];

final List<RegExp> csReferencesByTypeNoCopyright = <RegExp>[

  // used with _tryReferenceByType
  // groups 1 and 2 are the prefix, group 3 is the license type

  RegExp(
    kIndent +
    r'Written by Andy Polyakov <appro@openssl\.org> for the OpenSSL '
    r'project\. The module is, however, dual licensed under (OpenSSL) and '
    r'CRYPTOGAMS licenses depending on where you obtain it\. For further '
    r'details see http://www\.openssl\.org/~appro/cryptogams/\. '
    r'Permission to use under GPL terms is granted\.'.replaceAll(' ', _linebreak),
    multiLine: true,
    caseSensitive: false
  ),

];

class MultipleVersionedLicenseReferencePattern {
  MultipleVersionedLicenseReferencePattern({
    this.firstPrefixIndex,
    this.indentPrefixIndex,
    this.licenseIndices,
    this.versionIndices,
    this.checkLocalFirst = true,
    this.pattern
  });

  final int? firstPrefixIndex;
  final int? indentPrefixIndex;
  final List<int>? licenseIndices;
  final bool checkLocalFirst;
  final Map<int, int>? versionIndices;
  final RegExp? pattern;
}

final List<MultipleVersionedLicenseReferencePattern> csReferencesByUrl = <MultipleVersionedLicenseReferencePattern>[

  // used with _tryReferenceByUrl

  // SPDX
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[3],
    checkLocalFirst: false,
    pattern: RegExp(
      kIndent + r'SPDX-License-Identifier: (.*)',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // AFL
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[3],
    versionIndices: const <int, int>{ 3:4 },
    checkLocalFirst: false,
    pattern: RegExp(
      kIndent + r'Licensed under the (Academic Free License) version (3\.0)',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // Eclipse
  // Seen in auto-generated Java code in the Dart repository.
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[3],
    checkLocalFirst: false,
    pattern: RegExp(
      r'^(?:[-;#<!.\\"/* ]*[-;#<!.\"/*]+)?( *)Licensed under the Eclipse Public License v1\.0 \(the "License"\); you may not use this file except *\n'
      r'^\1\2in compliance with the License\. +You may obtain a copy of the License at *\n'
      r'^\1\2 *\n'
      r'^\1\2 *(http://www\.eclipse\.org/legal/epl-v10\.html) *\n'
      r'^\1\2 *\n'
      r'^\1\2Unless required by applicable law or agreed to in writing, software distributed under the License *\n'
      r'^\1\2is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express *\n'
      r'^\1\2or implied\. +See the License for the specific language governing permissions and limitations under *\n'
      r'^\1\2the License\.',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // Apache reference.
  // Seen in Android code.
  // TODO(ianh): For this license we only need to include the text once, not once per copyright
  // TODO(ianh): For this license we must also include all the NOTICE text (see section 4d)
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[3],
    checkLocalFirst: false,
    pattern: RegExp(
      kIndent +
      r'Licensed under the Apache License, Version 2\.0 \(the "License"\); *\n'
      r'^\1\2you may not use this file except in compliance with the License\. *\n'
      r'^\1\2You may obtain a copy of the License at *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2 *(https?://www\.apache\.org/licenses/LICENSE-2\.0) *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2 *Unless required by applicable law or agreed to in writing, software *\n'
      r'^\1\2 *distributed under the License is distributed on an "AS IS" BASIS, *\n'
      r'^\1\2 *WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied\. *\n'
      r'^\1\2 *See the License for the specific language governing permissions and *\n'
      r'^\1\2 *limitations under the License\.',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // BSD
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[3],
    checkLocalFirst: false,
    pattern: RegExp(
      kIndent +
      r'Use of this source code is governed by a BS?D-style *\n'
      r'^\1\2license that can be found in the LICENSE file or at *\n'
      r'^\1\2(https://developers.google.com/open-source/licenses/bsd)',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // MIT
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[3],
    checkLocalFirst: false,
    pattern: RegExp(
      kIndent +
      (
       r'Use of this source code is governed by a MIT-style '
       r'license that can be found in the LICENSE file or at '
       r'(https://opensource.org/licenses/MIT)'
       .replaceAll(' ', _linebreak)
      ),
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // MIT
  // the crazy s/./->/ thing is someone being over-eager with search-and-replace in rapidjson
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[3],
    checkLocalFirst: false,
    pattern: RegExp(
      kIndent +
      r'Licensed under the MIT License \(the "License"\); you may not use this file except *\n'
      r'^\1\2in compliance with the License(?:\.|->) You may obtain a copy of the License at *\n'
      r'^\1\n'
      r'^\1\2(http://opensource(?:\.|->)org/licenses/MIT) *\n'
      r'^\1\n'
      r'^\1\2Unless required by applicable law or agreed to in writing, software distributed *\n'
      r'^\1\2under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR *\n'
      r'^\1\2CONDITIONS OF ANY KIND, either express or implied(?:\.|->) See the License for the *\n'
      r'^\1\2specific language governing permissions and limitations under the License(?:\.|->)',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // Observatory (polymer)
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[3],
    checkLocalFirst: false,
    pattern: RegExp(
      kIndent +
      r'This code may only be used under the BSD style license found at (http://polymer.github.io/LICENSE.txt)$',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // ashmem
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[3],
    versionIndices: const <int, int>{3:4},
    checkLocalFirst: false,
    pattern: RegExp(
      kIndent +
      r'This file is dual licensed. +It may be redistributed and/or modified *\n'
      r'^\1\2under the terms of the (Apache) (2\.0) License OR version 2 of the GNU *\n'
      r'^\1\2General Public License\.',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // GNU ISO C++ GPL+Exception
  // Seen in gnu-libstdc++ in Android NDK
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[5, 6],
    versionIndices: const <int, int>{5:3, 6:4},
    pattern: RegExp(
      kIndent +
      r'This file is part of the GNU ISO C\+\+ Library\. +This library is free *\n'
      r'^\1\2software; you can redistribute _?_?it and/or modify _?_?it under the terms *\n'
      r'^\1\2of the GNU General Public License as published by the Free Software *\n'
      r'^\1\2Foundation; either version (3), or \(at your option\) any later *\n'
      r'^\1\2version\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2This library is distributed in the hope that _?_?it will be useful, but *\n'
      r'^\1\2WITHOUT ANY WARRANTY; without even the implied warranty of *\n'
      r'^\1\2MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE\. +See the GNU *\n'
      r'^\1\2General Public License for more details\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2Under Section 7 of GPL version \3, you are granted additional *\n'
      r'^\1\2permissions described in the GCC Runtime Library Exception, version *\n'
      r'^\1\2(3\.1), as published by the Free Software Foundation\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2You should have received a copy of the GNU General Public License and *\n'
      r'^\1\2a copy of the GCC Runtime Library Exception along with this program; *\n'
      r'^\1\2see the files (COPYING3) and (COPYING\.RUNTIME) respectively\. +If not, see *\n'
      r'^\1\2<http://www\.gnu\.org/licenses/>\.',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // GNU ISO C++ GPL+Exception, alternative wrapping
  // Seen in gnu-libstdc++ in Android NDK
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[5, 6],
    versionIndices: const <int, int>{5:3, 6:4},
    pattern: RegExp(
      kIndent +
      r'This file is part of the GNU ISO C\+\+ Library\. +This library is free *\n'
      r'^\1\2software; you can redistribute it and/or modify it under the *\n'
      r'^\1\2terms of the GNU General Public License as published by the *\n'
      r'^\1\2Free Software Foundation; either version (3), or \(at your option\) *\n'
      r'^\1\2any later version\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2This library is distributed in the hope that it will be useful, *\n'
      r'^\1\2but WITHOUT ANY WARRANTY; without even the implied warranty of *\n'
      r'^\1\2MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE\. +See the *\n'
      r'^\1\2GNU General Public License for more details\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2Under Section 7 of GPL version \3, you are granted additional *\n'
      r'^\1\2permissions described in the GCC Runtime Library Exception, version *\n'
      r'^\1\2(3\.1), as published by the(?:, 2009)? Free Software Foundation\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2You should have received a copy of the GNU General Public License and *\n'
      r'^\1\2a copy of the GCC Runtime Library Exception along with this program; *\n'
      r'^\1\2see the files (COPYING3) and (COPYING\.RUNTIME) respectively\. +If not, see *\n'
      r'^\1\2<http://www\.gnu\.org/licenses/>\.',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // GNU ISO C++ GPL+Exception, alternative footer without exception filename
  // Seen in gnu-libstdc++ in Android NDK
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[6, 4],
    versionIndices: const <int, int>{6:3, 4:5},
    pattern: RegExp(
      kIndent +
      r'This file is part of the GNU ISO C\+\+ Library\. +This library is free *\n'
      r'^\1\2software; you can redistribute it and/or modify it under the *\n'
      r'^\1\2terms of the GNU General Public License as published by the *\n'
      r'^\1\2Free Software Foundation; either version (3), or \(at your option\) *\n' // group 3 is the version of the gpl
      r'^\1\2any later version\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2This library is distributed in the hope that it will be useful, *\n'
      r'^\1\2but WITHOUT ANY WARRANTY; without even the implied warranty of *\n'
      r'^\1\2MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE\. +See the *\n'
      r'^\1\2GNU General Public License for more details\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2Under Section 7 of GPL version \3, you are granted additional *\n'
      r'^\1\2permissions described in the (GCC Runtime Library Exception), version *\n' // group 4 is the "file name" of the exception (it's missing in this version, so we use this as a hook to later, see the url mappings)
      r'^\1\2(3\.1), as published by the Free Software Foundation\. *\n' // group 5 is the version of the exception
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2You should have received a copy of the GNU General Public License along *\n'
      r'^\1\2with this library; see the file (COPYING3)\. +If not see *\n' // group 6 is the gpl file name
      r'^\1\2<http://www\.gnu\.org/licenses/>\.',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // GCC GPL+Exception
  // Seen in gnu-libstdc++ in Android NDK
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[5, 6],
    versionIndices: const <int, int>{5:3, 6:4},
    pattern: RegExp(
      kIndent +
      r'This file is part of GCC. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2GCC is free software; you can redistribute it and/or modify it under *\n'
      r'^\1\2the terms of the GNU General Public License as published by the Free *\n'
      r'^\1\2Software Foundation; either version (3), or \(at your option\) any later *\n'
      r'^\1\2version\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2GCC is distributed in the hope that it will be useful, but WITHOUT ANY *\n'
      r'^\1\2WARRANTY; without even the implied warranty of MERCHANTABILITY or *\n'
      r'^\1\2FITNESS FOR A PARTICULAR PURPOSE\. +See the GNU General Public License *\n'
      r'^\1\2for more details\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2Under Section 7 of GPL version \3, you are granted additional *\n'
      r'^\1\2permissions described in the GCC Runtime Library Exception, version *\n'
      r'^\1\2(3\.1), as published by the Free Software Foundation\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2You should have received a copy of the GNU General Public License and *\n'
      r'^\1\2a copy of the GCC Runtime Library Exception along with this program; *\n'
      r'^\1\2see the files (COPYING3) and (COPYING\.RUNTIME) respectively\. +If not, see *\n'
      r'^\1\2<http://www\.gnu\.org/licenses/>\.',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // GCC GPL+Exception, alternative line wrapping
  // Seen in gnu-libstdc++ in Android NDK
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[5, 6],
    versionIndices: const <int, int>{ 5:3, 6:4 },
    pattern: RegExp(
      kIndent +
      r'This file is part of GCC. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2GCC is free software; you can redistribute it and/or modify *\n'
      r'^\1\2it under the terms of the GNU General Public License as published by *\n'
      r'^\1\2the Free Software Foundation; either version (3), or \(at your option\) *\n'
      r'^\1\2any later version\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2GCC is distributed in the hope that it will be useful, *\n'
      r'^\1\2but WITHOUT ANY WARRANTY; without even the implied warranty of *\n'
      r'^\1\2MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE\. +See the *\n'
      r'^\1\2GNU General Public License for more details\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2Under Section 7 of GPL version \3, you are granted additional *\n'
      r'^\1\2permissions described in the GCC Runtime Library Exception, version *\n'
      r'^\1\2(3\.1), as published by the Free Software Foundation\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2You should have received a copy of the GNU General Public License and *\n'
      r'^\1\2a copy of the GCC Runtime Library Exception along with this program; *\n'
      r'^\1\2see the files (COPYING3) and (COPYING\.RUNTIME) respectively\. +If not, see *\n'
      r'^\1\2<http://www\.gnu\.org/licenses/>\.',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // LGPL 2.1
  // some engine code
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[4],
    versionIndices: const <int, int>{ 4:3 },
    pattern: RegExp(
      kIndent +
      r'This library is free software; you can redistribute it and/or *\n'
      r'^\1\2modify it under the terms of the GNU Library General Public *\n'
      r'^\1\2License as published by the Free Software Foundation; either *\n'
      r'^\1\2version (2) of the License, or \(at your option\) any later version\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2This library is distributed in the hope that it will be useful, *\n'
      r'^\1\2but WITHOUT ANY WARRANTY; without even the implied warranty of *\n?'
       r'\1\2MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE\. +See the GNU *\n?'
       r'\1\2Library General Public License for more details\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2You should have received a copy of the GNU Library General Public License *\n'
      r'^\1\2(?:along|aint) with this library; see the file (COPYING\.LI(?:B|other\.m_))\.?  If not, write to *\n'
      r'^\1\2the Free Software Foundation, Inc\., (?:51 Franklin Street, Fifth Floor|59 Temple Place - Suite 330), *\n'
      r'^\1\2Boston, MA 0211[01]-130[17], US(?:A\.|m_)',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // AFL/LGPL
  // xdg_mime
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[4],
    versionIndices: const <int, int>{ 4:3 },
    pattern: RegExp(
      kIndent +
      r'Licensed under the Academic Free License version 2.0 *\n'
      r'^\1\2Or under the following terms: *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2This library is free software; you can redistribute it and/or *\n'
      r'^\1\2modify it under the terms of the GNU Lesser General Public *\n'
      r'^\1\2License as published by the Free Software Foundation; either *\n'
      r'^\1\2version (2) of the License, or \(at your option\) any later version\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2This library is distributed in the hope that it will be useful, *\n'
      r'^\1\2but WITHOUT ANY WARRANTY; without even the implied warranty of *\n'
      r'^\1\2MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE\.\t? +See the GNU *\n'
      r'^\1\2Lesser General Public License for more details\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2You should have received a copy of the (GNU Lesser) General Public *\n'
      r'^\1\2License along with this library; if not, write to the *\n'
      r'^\1\2Free Software Foundation, Inc\., 59 Temple Place - Suite 330, *\n'
      r'^\1\2Boston, MA 0211[01]-1307, USA\.',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // MPL
  // root_certificates
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[4],
    versionIndices: const <int, int>{ 4:3 },
    pattern: RegExp(
      kIndent +
      r'This Source Code Form is subject to the terms of the Mozilla Public *\n'
      r'^\1\2License, v\. (2.0)\. +If a copy of the MPL was not distributed with this *\n'
      r'^\1\2file, You can obtain one at (http://mozilla\.org/MPL/2\.0/)\.',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // MPL/GPL/LGPL
  // engine
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[3], // 5 is lgpl, which we're actively not selecting
    versionIndices: const <int, int>{ 3:4 }, // 5:6 for lgpl
    pattern: RegExp(
      kIndent +
      r'(?:Version: [GMPL/012. ]+ *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2)?The contents of this file are subject to the (Mozilla Public License) Version *\n'
      r'^\1\2(1\.1) \(the "License"\); you may not use this file except in compliance with *\n'
      r'^\1\2the License\. +You may obtain a copy of the License at *\n'
      r'^\1\2http://www\.mozilla\.org/MPL/ *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2Software distributed under the License is distributed on an "AS IS" basis, *\n'
      r'^\1\2WITHOUT WARRANTY OF ANY KIND, either express or implied\. +See the License *\n'
      r'^\1\2for the specific language governing rights and limitations under the *\n'
      r'^\1\2License\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2The Original Code is .+?(?:released\n'
      r'^\1\2March 31, 1998\.)?\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2The Initial Developer of the Original Code is *\n'
      r'^\1\2.+\n'
      r'^\1\2Portions created by the Initial Developer are Copyright \(C\) [0-9]+ *\n'
      r'^\1\2the Initial Developer\. +All Rights Reserved\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2Contributor\(s\): *\n'
      r'(?:\1\2  .+\n)*'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2'
      +
      (
        r'Alternatively, the contents of this file may be used under the terms of '
        r'either (?:of )?the GNU General Public License Version 2 or later \(the "GPL"\), '
        r'or the (GNU Lesser) General Public License Version (2\.1) or later \(the '
        r'"LGPL"\), in which case the provisions of the GPL or the LGPL are '
        r'applicable instead of those above\. If you wish to allow use of your '
        r'version of this file only under the terms of either the GPL or the LGPL, '
        r'and not to allow others to use your version of this file under the terms '
        r'of the MPL, indicate your decision by deleting the provisions above and '
        r'replace them with the notice and other provisions required by the GPL or '
        r'the LGPL\. If you do not delete the provisions above, a recipient may use '
        r'your version of this file under the terms of any one of the MPL, the GPL or '
        r'the LGPL\.'
        .replaceAll(' ', _linebreak)
      ),
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // LGPL/MPL/GPL
  // engine
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[4],
    versionIndices: const <int, int>{ 4:3 },
    pattern: RegExp(
      kIndent +
      r'This library is free software; you can redistribute it and/or *\n'
      r'^\1\2modify it under the terms of the GNU Lesser General Public *\n'
      r'^\1\2License as published by the Free Software Foundation; either *\n'
      r'^\1\2version (2\.1) of the License, or \(at your option\) any later version\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2This library is distributed in the hope that it will be useful, *\n'
      r'^\1\2but WITHOUT ANY WARRANTY; without even the implied warranty of *\n'
      r'^\1\2MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE\. +See the GNU *\n'
      r'^\1\2Lesser General Public License for more details\. *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2You should have received a copy of the (GNU Lesser) General Public *\n'
      r'^\1\2License along with this library; if not, write to the Free Software *\n'
      r'^\1\2Foundation, Inc\., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 +USA *\n'
      r'^(?:(?:\1\2? *)? *\n)*'
      r'^\1\2Alternatively, the contents of this file may be used under the terms *\n'
      r'^\1\2of either the Mozilla Public License Version 1\.1, found at *\n'
      r'^\1\2http://www\.mozilla\.org/MPL/ \(the "MPL"\) or the GNU General Public *\n'
      r'^\1\2License Version 2\.0, found at http://www\.fsf\.org/copyleft/gpl\.html *\n'
      r'^\1\2\(the "GPL"\), in which case the provisions of the MPL or the GPL are *\n'
      r'^\1\2applicable instead of those above\. +If you wish to allow use of your *\n'
      r'^\1\2version of this file only under the terms of one of those two *\n'
      r'^\1\2licenses \(the MPL or the GPL\) and not to allow others to use your *\n'
      r'^\1\2version of this file under the LGPL, indicate your decision by *\n'
      r'^\1\2deletingthe provisions above and replace them with the notice and *\n'
      r'^\1\2other provisions required by the MPL or the GPL, as the case may be\. *\n'
      r'^\1\2If you do not delete the provisions above, a recipient may use your *\n'
      r'^\1\2version of this file under any of the LGPL, the MPL or the GPL\.',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // ICU (Unicode)
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[4],
    checkLocalFirst: false,
    pattern: RegExp(
      kIndent +
      r'(?:©|Copyright (©|\(C\))) 20.. and later: Unicode, Inc. and others.[ *]*\n'
      r'^\1\2License & terms of use: (https?://www.unicode.org/copyright.html)',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // ICU (Unicode)
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[3],
    checkLocalFirst: false,
    pattern: RegExp(
      kIndent +
      r'(?:Copyright ©) 20..-20.. Unicode, Inc. and others. All rights reserved. '
      r'Distributed under the Terms of Use in (http://www.unicode.org/copyright.html)',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // ICU (Unicode)
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[3],
    checkLocalFirst: false,
    pattern: RegExp(
      kIndent +
      r'Copyright \(C\) 2016 and later: Unicode, Inc. and others. License & terms of use: (http://www.unicode.org/copyright.html) *\n',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // ICU (Unicode)
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[3],
    checkLocalFirst: false,
    pattern: RegExp(
      kIndent +
      r'© 2016 and later: Unicode, Inc. and others. *\n'
      r'^ *License & terms of use: (http://www.unicode.org/copyright.html)#License *\n'
      r'^ *\n'
      r'^ *Copyright \(c\) 2000 IBM, Inc. and Others. *\n',
      multiLine: true,
      caseSensitive: false,
    )
  ),

  // Unicode terms of use
  MultipleVersionedLicenseReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    licenseIndices: const <int>[3],
    checkLocalFirst: false,
    pattern: RegExp(
      kIndent +
      r'\n// For terms of use, see (https://www.unicode.org/copyright.html)\n',
      caseSensitive: false,
    )
  ),
];


// INLINE LICENSES

final List<RegExp> csLicenses = <RegExp>[

  // used with _tryInline, with needsCopyright: true (will only match if preceded by a copyright notice)
  // should have two groups, prefixes 1 and 2

  // BoringSSL
  RegExp(
    kIndent +
    r'Redistribution and use in source and binary forms, with or without *\n'
    r'^\1\2modification, are permitted provided that the following conditions *\n'
    r'^\1\2are met: *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2(?:[-*1-9.)/ ]+)Redistributions of source code must retain the above copyright *\n'
    r'^\1\2 *notice, this list of conditions and the following disclaimer\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2(?:[-*1-9.)/ ]+)Redistributions in binary form must reproduce the above copyright *\n'
    r'^\1\2 *notice, this list of conditions and the following disclaimer in *\n'
    r'^\1\2 *the documentation and/or other materials provided with the *\n'
    r'^\1\2 *distribution\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2(?:[-*1-9.)/ ]+)All advertising materials mentioning features or use of this *\n'
    r'^\1\2 *software must display the following acknowledgment: *\n'
    r'^\1\2 *"This product includes software developed by the OpenSSL Project *\n'
    r'^\1\2 *for use in the OpenSSL Toolkit\. \(http://www\.OpenSSL\.org/\)" *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2(?:[-*1-9.)/ ]+)The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to *\n'
    r'^\1\2 *endorse or promote products derived from this software without *\n'
    r'^\1\2 *prior written permission\. +For written permission, please contact *\n'
    r'^\1\2 *[^@ ]+@OpenSSL\.org\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2(?:[-*1-9.)/ ]+)Products derived from this software may not be called "OpenSSL" *\n'
    r'^\1\2 *nor may "OpenSSL" appear in their names without prior written *\n'
    r'^\1\2 *permission of the OpenSSL Project\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2(?:[-*1-9.)/ ]+)Redistributions of any form whatsoever must retain the following *\n'
    r'^\1\2 *acknowledgment: *\n'
    r'^\1\2 *"This product includes software developed by the OpenSSL Project *\n'
    r'^\1\2 *for use in the OpenSSL Toolkit \(http://www\.OpenSSL\.org/\)" *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r"^\1\2THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY *\n"
    r'^\1\2EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE *\n'
    r'^\1\2IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR *\n'
    r'^\1\2PURPOSE ARE DISCLAIMED\. +IN NO EVENT SHALL THE OpenSSL PROJECT OR *\n'
    r'^\1\2ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, *\n'
    r'^\1\2SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES \(INCLUDING, BUT *\n'
    r'^\1\2NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; *\n'
    r'^\1\2LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION\) *\n'
    r'^\1\2HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, *\n'
    r'^\1\2STRICT LIABILITY, OR TORT \(INCLUDING NEGLIGENCE OR OTHERWISE\) *\n'
    r'^\1\2ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED *\n'
    r'^\1\2OF THE POSSIBILITY OF SUCH DAMAGE\.',
    multiLine: true,
    caseSensitive: false
  ),

  RegExp(
    kIndent +
    r'(?:This package is an SSL implementation written *\n'
    r'^\1\2by Eric Young \(eay@cryptsoft\.com\)\. *\n'
    r'^\1\2The implementation was written so as to conform with Netscapes SSL\. *\n'
    r'^(?:(?:\1\2?g? *)? *\n)*'
    r'^\1\2This library is free for commercial and non-commercial use as long as *\n'
    r'^\1\2the following conditions are aheared to\. +The following conditions *\n'
    r'^\1\2apply to all code found in this distribution, be it the RC4, RSA, *\n'
    r'^\1\2lhash, DES, etc\., code; not just the SSL code\. +The SSL documentation *\n'
    r'^\1\2included with this distribution is covered by the same copyright terms *\n'
    r'^\1\2except that the holder is Tim Hudson \(tjh@cryptsoft\.com\)\. *\n'
    r'^(?:(?:\1\2?g? *)? *\n)*'
    r"^\1\2Copyright remains Eric Young's, and as such any Copyright notices in *\n"
    r'^\1\2the code are not to be removed\. *\n'
    r'^\1\2If this package is used in a product, Eric Young should be given attribution *\n'
    r'^\1\2as the author of the parts of the library used\. *\n'
    r'^\1\2This can be in the form of a textual message at program startup or *\n'
    r'^\1\2in documentation \(online or textual\) provided with the package\. *\n'
    r'^(?:(?:\1\2?g? *)? *\n)*'
    r'^\1\2)?Redistribution and use in source and binary forms, with or without *\n'
    r'^\1\2modification, are permitted provided that the following conditions *\n'
    r'^\1\2are met: *\n'
    r'^\1\2(?:[-*1-9.)/ ]+)Redistributions of source code must retain the copyright *\n'
    r'^\1\2 *notice, this list of conditions and the following disclaimer\. *\n'
    r'^\1\2(?:[-*1-9.)/ ]+)Redistributions in binary form must reproduce the above copyright *\n'
    r'^\1\2 *notice, this list of conditions and the following disclaimer in the *\n'
    r'^\1\2 *documentation and/or other materials provided with the distribution\. *\n'
    r'^\1\2(?:[-*1-9.)/ ]+)All advertising materials mentioning features or use of this software *\n'
    r'^\1\2 *must display the following acknowledgement: *\n'
    r'^\1\2 *"This product includes cryptographic software written by *\n'
    r'^\1\2 *Eric Young \(eay@cryptsoft\.com\)" *\n'
    r"^\1\2 *The word 'cryptographic' can be left out if the rouines from the library *\n" // TODO(ianh): File a bug on the number of analyzer errors you get if you replace the " characters on this line with '
    r'^\1\2 *being used are not cryptographic related :-\)\. *\n'
    r'^\1\2(?:[-*1-9.)/ ]+)If you include any Windows specific code \(or a derivative thereof\) fromg? *\n'
    r'^\1\2 *the apps directory \(application code\) you must include an acknowledgement: *\n'
    r'^\1\2 *"This product includes software written by Tim Hudson \(tjh@cryptsoft\.com\)" *\n'
    r'^(?:(?:\1\2?g? *)? *\n)*'
    r"^\1\2THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND *\n"
    r'^\1\2ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE *\n'
    r'^\1\2IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE *\n'
    r'^\1\2ARE DISCLAIMED\. +IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE *\n'
    r'^\1\2FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL *\n'
    r'^\1\2DAMAGES \(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS *\n'
    r'^\1\2OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION\) *\n'
    r'^\1\2HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT *\n'
    r'^\1\2LIABILITY, OR TORT \(INCLUDING NEGLIGENCE OR OTHERWISE\) ARISING IN ANY WAY *\n'
    r'^\1\2OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF *\n'
    r'^\1\2SUCH DAMAGE\. *\n'
    r'^(?:(?:\1\2?g? *)? *\n)*'
    r'^\1\2The licence and distribution terms for any publically available version or *\n'
    r'^\1\2derivative of this code cannot be changed\. +i\.e\. +this code cannot simply be *\n'
    r'^\1\2copied and put under another distribution licence *\n'
    r'^\1\2\[including the GNU Public Licence\.\]',
    multiLine: true,
    caseSensitive: false
  ),

  RegExp(
    kIndent +
    (
      r'License to copy and use this software is granted provided that it '
      r'is identified as the "RSA Data Security, Inc\. MD5 Message-Digest '
      r'Algorithm" in all material mentioning or referencing this software '
      r'or this function\. '
      r'License is also granted to make and use derivative works provided '
      r'that such works are identified as "derived from the RSA Data '
      r'Security, Inc\. MD5 Message-Digest Algorithm" in all material '
      r'mentioning or referencing the derived work\. '
      r'RSA Data Security, Inc\. makes no representations concerning either '
      r'the merchantability of this software or the suitability of this '
      r'software for any particular purpose\. It is provided "as is" '
      r'without express or implied warranty of any kind\. '
      r'These notices must be retained in any copies of any part of this '
      r'documentation and/or software\.'
      .replaceAll(' ', _linebreak)
    ),
    multiLine: true,
    caseSensitive: false,
  ),

  // BSD-DERIVED LICENSES

  RegExp(
    kIndent +

    // Some files in ANGLE prefix the license with a description of the license.
    r'(?:BSD 2-Clause License \(http://www.opensource.org/licenses/bsd-license.php\))?' +
    _linebreak +

    (
      'Redistribution and use in source and binary forms, with or without '
      'modification, are permitted provided that the following conditions are met:'
      .replaceAll(' ', _linebreak)
    )
    +

    // the conditions:
    r'(?:' +

    // indented blank lines
    _linebreak +

    // truly blank lines
    r'|[\r\n]+' +

    // ad clause - ucb
    r'|(?:[-*1-9.)/ ]*)' +
    (
      'All advertising materials mentioning features or use of this software '
      'must display the following acknowledgement: This product includes software '
      'developed by the University of California, Berkeley and its contributors\\.'
      .replaceAll(' ', _linebreak)
    )
    +

    // ad clause - netbsd
    r'|(?:[-*1-9.)/ ]*)' +
    (
      'All advertising materials mentioning features or use of this software '
      'must display the following acknowledgement: This product includes software '
      'developed by the NetBSD Foundation, Inc\\. and its contributors\\.'
      .replaceAll(' ', _linebreak)
    )
    +

    // ack clause
    r'|(?:[-*1-9.)/ ]*)' +
    (
      r'The origin of this software must not be misrepresented; you must not claim '
      r'that you wrote the original software\. If you use this software in a product, '
      r'an acknowledgment in the product documentation would be appreciated but is '
      r'not required\.'
      .replaceAll(' ', _linebreak)
    )
    +

    r'|(?:[-*1-9.)/ ]*)' +
    (
      r'Altered source versions must be plainly marked as such, and must not be '
      r'misrepresented as being the original software\.'
      .replaceAll(' ', _linebreak)
    )
    +

    // no ad clauses
    r'|(?:[-*1-9.)/ ]*)' +
    (
      'Neither my name, .+, nor the names of any other contributors to the code '
      'use may not be used to endorse or promote products derived from this '
      'software without specific prior written permission\\.'
      .replaceAll(' ', _linebreak)
    )
    +

    r'|(?:[-*1-9.)/ ]*)' +
    (
      'The name of the author may not be used to endorse or promote products '
      'derived from this software without specific prior written permission\\.?'
      .replaceAll(' ', _linebreak)
    )
    +

    r'|(?:[-*1-9.)/ ]*)' +
    (
      'Neither the name of .+ nor the names of its contributors may be used '
      'to endorse or promote products derived from this software without '
      'specific prior written permission\\.'
      .replaceAll(' ', _linebreak)
    )
    +

    // notice clauses
    r'|(?:[-*1-9.)/ ]*)' +
    (
      'Redistributions of source code must retain the above copyright notice, '
      'this list of conditions and the following disclaimer\\.'
      .replaceAll(' ', _linebreak)
    )
    +

    r'|(?:[-*1-9.)/ ]*)' +
    (
      'Redistributions in binary form must reproduce the above copyright notice, '
      'this list of conditions and the following disclaimer in the documentation '
      'and/or other materials provided with the distribution\\.'
      .replaceAll(' ', _linebreak)
    )
    +

    r'|(?:[-*1-9.)/ ]*)' +
    (
      'Redistributions in binary form must reproduce the above copyright notice, '
      'this list of conditions and the following disclaimer\\.'
      .replaceAll(' ', _linebreak)
    )
    +

    // end of conditions
    r')*'
    +

    // disclaimers
    (
      'THIS SOFTWARE IS PROVIDED (?:BY .+(?: .+)? )?["“`]+AS IS["”\']+,? AND ANY EXPRESS OR IMPLIED '
      'WARRANTIES,(?::tabnew)? INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF '
      'MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED\\. IN NO EVENT '
      'SHALL .+(?: .+)? BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR '
      'CONSEQUENTIAL DAMAGES \\(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS '
      'OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION\\) HOWEVER CAUSED '
      'AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT \\(INCLUDING '
      'NEGLIGENCE OR OTHERWISE\\) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF '
      'ADVISED OF THE POSSIBILITY OF SUCH DAMAGE\\.'
      .replaceAll(' ', _linebreak)
    ),
    multiLine: true,
    caseSensitive: false,
  ),


  // THREE-CLAUSE LICENSES
  // licenses in this section are sorted first by the length of the last line, in words,
  // and then by the length of the bulletted clauses, in total lines.

  // Seen in libjpeg-turbo
  // TODO(ianh): Mark License as not needing to be shown
  RegExp(
    kIndent +
    r"This software is provided 'as-is', without any express or implied *\n"
    r'^\1\2warranty\. +In no event will the authors be held liable for any damages *\n'
    r'^\1\2arising from the use of this software\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2Permission is granted to anyone to use this software for any purpose, *\n'
    r'^\1\2including commercial applications, and to alter it and redistribute it *\n'
    r'^\1\2freely, subject to the following restrictions: *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2(?:[-*1-9.)/ ]+)The origin of this software must not be misrepresented; you must not *\n'
    r'^\1\2 *claim that you wrote the original software\. +If you use this software *\n'
    r'^\1\2 *in a product, an acknowledgment in the product documentation would be *\n'
    r'^\1\2 *appreciated but is not required\. *\n'
    r'^\1\2(?:[-*1-9.)/ ]+)Altered source versions must be plainly marked as such, and must not be *\n'
    r'^\1\2 *misrepresented as being the original software\. *\n'
    r'^\1\2(?:[-*1-9.)/ ]+)This notice may not be removed or altered from any source distribution\.',
    multiLine: true,
    caseSensitive: false
  ),

  // seen in GLFW
  RegExp(
    kIndent +
    r"This software is provided 'as-is', without any express or implied *\n"
    r'^\1\2warranty\. +In no event will the authors be held liable for any damages *\n'
    r'^\1\2arising from the use of this software\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2Permission is granted to anyone to use this software for any purpose, *\n'
    r'^\1\2including commercial applications, and to alter it and redistribute it *\n'
    r'^\1\2freely, subject to the following restrictions: *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2(?:[-*1-9.)/ ]+)The origin of this software must not be misrepresented; you must not *\n'
    r'^\1\2 *claim that you wrote the original software\. +If you use this software *\n'
    r'^\1\2 *in a product, an acknowledgment in the product documentation would *\n'
    r'^\1\2 *be appreciated but is not required\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2(?:[-*1-9.)/ ]+)Altered source versions must be plainly marked as such, and must not *\n'
    r'^\1\2 *be misrepresented as being the original software\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2(?:[-*1-9.)/ ]+)This notice may not be removed or altered from any source *\n'
    r'^\1\2 *distribution\.',
    multiLine: true,
    caseSensitive: false
  ),


  // MIT-DERIVED LICENSES

  // Seen in Mesa, among others.
  RegExp(
    kIndent +
    (
      r'(?:' // this bit is optional
      r'Licensed under the MIT license:\r?\n' // seen in expat
      r'\1\2? *\r?\n' // blank line
      r'\1\2' // this is the prefix for the next block (handled by kIndent if this optional bit is skipped)
      r')?' // end of optional bit
    )
    +
    (
      r'Permission is hereby granted, free of charge, to any person obtaining '
      r'a copy of this software and(?: /or)? associated documentation files \(the "(?:Software|Materials) "\), '
      r'to deal in the (?:Software|Materials) without restriction, including without limitation '
      r'the rights to use, copy, modify, merge, publish, distribute, sub license, '
      r'and/or sell copies of the (?:Software|Materials), and to permit persons to whom the '
      r'(?:Software|Materials) (?:is|are) furnished to do so, subject to the following conditions:'
      .replaceAll(' ', _linebreak)
    )
    +
    r'(?:'
    +
    (
      r'(?:(?:\1\2?(?: *| -*))? *\r?\n)*' // A version with "// -------" between sections was seen in ffx_spd, hence the -*.

      +

      r'|'

      r'\1\2 '
      r'The above copyright notice and this permission notice'
      r'(?: \(including the next paragraph\))? '
      r'shall be included in all copies or substantial portions '
      r'of the (?:Software|Materials)\.'

      r'|'

      r'\1\2 '
      r'The above copyright notice including the dates of first publication and either this '
      r'permission notice or a reference to .+ shall be '
      r'included in all copies or substantial portions of the Software.'

      r'|'

      r'\1\2 '
      r'In addition, the following condition applies:'

      r'|'

      r'\1\2 '
      r'All redistributions must retain an intact copy of this copyright notice and disclaimer\.'

      r'|'

      r'\1\2 '
      r'THE (?:SOFTWARE|MATERIALS) (?:IS|ARE) PROVIDED "AS -? IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS '
      r'OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, '
      r'FITNESS FOR A PARTICULAR PURPOSE AND NON-?INFRINGEMENT\. IN NO EVENT SHALL '
      r'.+(?: .+)? BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER '
      r'IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN '
      r'CONNECTION WITH THE (?:SOFTWARE|MATERIALS) OR THE USE OR OTHER DEALINGS IN THE (?:SOFTWARE|MATERIALS)\.'

      r'|'

      r'\1\2 '
      r'THE (?:SOFTWARE|MATERIALS) (?:IS|ARE) PROVIDED "AS -? IS" AND WITHOUT WARRANTY OF ANY KIND, '
      r'EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY '
      r'OR FITNESS FOR A PARTICULAR PURPOSE\.'

      r'|'

      r'\1\2 '
      r'IN NO EVENT SHALL .+ BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL '
      r'DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, '
      r'WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING '
      r'OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE\.'

      r'|'

      r'\1\2 '
      r'Except as contained in this notice, the name of .+ shall not '
      r'be used in advertising or otherwise to promote the sale, use or other dealings in '
      r'this Software without prior written authorization from .+\.'

      .replaceAll(' ', _linebreak)
    )
    +
    r')*',
    multiLine: true,
    caseSensitive: false
  ),

  // BISON LICENSE
  // Seen in some ANGLE source. The usage falls under the "special exception" clause.
  RegExp(
    kIndent +
    r'This program is free software: you can redistribute it and/or modify\n'
    r'^(?:\1\2)?it under the terms of the GNU General Public License as published by\n'
    r'^(?:\1\2)?the Free Software Foundation, either version 3 of the License, or\n'
    r'^(?:\1\2)?\(at your option\) any later version.\n'
    r'^(?:\1\2)?\n*'
    r'^(?:\1\2)?This program is distributed in the hope that it will be useful,\n'
    r'^(?:\1\2)?but WITHOUT ANY WARRANTY; without even the implied warranty of\n'
    r'^(?:\1\2)?MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n'
    r'^(?:\1\2)?GNU General Public License for more details.\n'
    r'^(?:\1\2)?\n*'
    r'^(?:\1\2)?You should have received a copy of the GNU General Public License\n'
    r'^(?:\1\2)?along with this program.  If not, see <https?://www.gnu.org/licenses/>.  \*/\n'
    r'^(?:\1\2)?\n*' +
    kIndent +
    r'As a special exception, you may create a larger work that contains\n'
    r'^(?:\1\2)?part or all of the Bison parser skeleton and distribute that work\n'
    r"^(?:\1\2)?under terms of your choice, so long as that work isn't itself a\n"
    r'^(?:\1\2)?parser generator using the skeleton or a modified version thereof\n'
    r'^(?:\1\2)?as a parser skeleton.  Alternatively, if you modify or redistribute\n'
    r'^(?:\1\2)?the parser skeleton itself, you may \(at your option\) remove this\n'
    r'^(?:\1\2)?special exception, which will cause the skeleton and the resulting\n'
    r'^(?:\1\2)?Bison output files to be licensed under the GNU General Public\n'
    r'^(?:\1\2)?License without this special exception.\n'
    r'^(?:\1\2)?\n*'
    r'^(?:\1\2)?This special exception was added by the Free Software Foundation in\n'
    r'^(?:\1\2)?version 2.2 of Bison.  \*/\n',
    multiLine: true,
    caseSensitive: false
  ),

  // OTHER BRIEF LICENSES

  RegExp(
    kIndent +
    r'Permission to use, copy, modify, and distribute this software for any *\n'
    r'^(?:\1\2)?purpose with or without fee is hereby granted, provided that the above *\n'
    r'^(?:\1\2)?copyright notice and this permission notice appear in all copies(?:, and that *\n'
    r'^(?:\1\2)?the name of .+ not be used in advertising or *\n'
    r'^(?:\1\2)?publicity pertaining to distribution of the document or software without *\n'
    r'^(?:\1\2)?specific, written prior permission)?\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^(?:\1\2)?THE SOFTWARE IS PROVIDED "AS IS" AND .+ DISCLAIMS ALL(?: WARRANTIES)? *\n'
    r'^(?:\1\2)?(?:WARRANTIES )?WITH REGARD TO THIS SOFTWARE,? INCLUDING ALL IMPLIED WARRANTIES(?: OF)? *\n'
    r'^(?:\1\2)?(?:OF )?MERCHANTABILITY AND FITNESS\. +IN NO EVENT SHALL .+(?: BE LIABLE FOR)? *\n'
    r'^(?:\1\2)?(?:.+ BE LIABLE FOR )?ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL(?: DAMAGES OR ANY DAMAGES)? *\n'
    r'^(?:\1\2)?(?:DAMAGES OR ANY DAMAGES )?WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR(?: PROFITS, WHETHER IN AN)? *\n'
    r'^(?:\1\2)?(?:PROFITS, WHETHER IN AN )?ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS(?: ACTION, ARISING OUT OF)? *\n'
    r'^(?:\1\2)?(?:ACTION, ARISING OUT OF )?OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS(?: SOFTWARE)?(?: *\n'
    r'^(?:\1\2)?SOFTWARE)?\.',
    multiLine: true,
    caseSensitive: false
  ),

  // Seen in the NDK
  RegExp(
    kIndent +
    r'Permission to use, copy, modify, and/or distribute this software for any *\n'
    r'^\1\2purpose with or without fee is hereby granted, provided that the above *\n'
    r'^\1\2copyright notice and this permission notice appear in all copies\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2THE SOFTWARE IS PROVIDED "AS IS" AND .+ DISCLAIMS ALL WARRANTIES(?: WITH)? *\n'
    r'^\1\2(?:WITH )?REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF(?: MERCHANTABILITY)? *\n'
    r'^\1\2(?:MERCHANTABILITY )?AND FITNESS\. +IN NO EVENT SHALL .+ BE LIABLE FOR(?: ANY(?: SPECIAL, DIRECT,)?)? *\n'
    r'^\1\2(?:(?:ANY )?SPECIAL, DIRECT, )?INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES(?: WHATSOEVER RESULTING FROM)? *\n'
    r'^\1\2(?:WHATSOEVER RESULTING FROM )?LOSS OF USE, DATA OR PROFITS, WHETHER IN AN(?: ACTION(?: OF CONTRACT, NEGLIGENCE)?)? *\n'
    r'^\1\2(?:(?:ACTION )?OF CONTRACT, NEGLIGENCE )?OR OTHER TORTIOUS ACTION, ARISING OUT OF(?: OR IN(?: CONNECTION WITH THE USE OR)?)? *\n'
    r'^\1\2(?:(?:OR IN )?CONNECTION WITH THE USE OR )?PERFORMANCE OF THIS SOFTWARE\.',
    multiLine: true,
    caseSensitive: false
  ),

  // seen in GLFW
  RegExp(
    kIndent +
    r'Permission to use, copy, modify, and distribute this software for any *\n'
    r'^\1\2purpose with or without fee is hereby granted, provided that the above *\n'
    r'^\1\2copyright notice and this permission notice appear in all copies\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r"^\1\2THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED *\n"
    r'^\1\2WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF *\n'
    r'^\1\2MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE\. +THE AUTHORS AND *\n'
    r'^\1\2CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER\.',
    multiLine: true,
    caseSensitive: false
  ),

  // seen in GLFW, base
  RegExp(
    kIndent +
    r'Permission to use, copy, modify, and distribute this software for any *\n'
    r'^\1\2purpose without fee is hereby granted, provided that this entire notice *\n'
    r'^\1\2is included in all copies of any software which is or includes a copy *\n'
    r'^\1\2or modification of this software and in all copies of the supporting *\n'
    r'^\1\2documentation for such software\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED *\n'
    r'^\1\2WARRANTY\. +IN PARTICULAR, NEITHER THE AUTHOR NOR .+ MAKES ANY *\n'
    r'^\1\2REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY *\n'
    r'^\1\2OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE\.',
    multiLine: true,
    caseSensitive: false
  ),

  // harfbuzz
  RegExp(
    kIndent +
    r'Permission is hereby granted, without written agreement and without *\n'
    r'^\1\2license or royalty fees, to use, copy, modify, and distribute this *\n'
    r'^\1\2software and its documentation for any purpose, provided that the *\n'
    r'^\1\2above copyright notice and the following two paragraphs appear in *\n'
    r'^\1\2all copies of this software\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR *\n'
    r'^\1\2DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES *\n'
    r'^\1\2ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN *\n'
    r'^\1\2IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH *\n'
    r'^\1\2DAMAGE\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, *\n'
    r'^\1\2BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND *\n'
    r'^\1\2FITNESS FOR A PARTICULAR PURPOSE\. +THE SOFTWARE PROVIDED HEREUNDER IS *\n'
    r'^\1\2ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO *\n'
    r'^\1\2PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS\. *\n',
    multiLine: true,
    caseSensitive: false
  ),

  // NDK
  RegExp(
    kIndent +
    r'Permission to use, copy, modify and distribute this software and *\n'
    r'^\1\2its documentation is hereby granted, provided that both the copyright *\n'
    r'^\1\2notice and this permission notice appear in all copies of the *\n'
    r'^\1\2software, derivative works or modified versions, and any portions *\n'
    r'^\1\2thereof, and that both notices appear in supporting documentation. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" *\n'
    r'^\1\2CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND *\n'
    r'^\1\2FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2Carnegie Mellon requests users of this software to return to *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2 Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU *\n'
    r'^\1\2 School of Computer Science *\n'
    r'^\1\2 Carnegie Mellon University *\n'
    r'^\1\2 Pittsburgh PA 15213-3890 *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2any improvements or extensions that they make and grant Carnegie the *\n'
    r'^\1\2rights to redistribute these changes. *\n',
    multiLine: true,
    caseSensitive: false
  ),

  // seen in Android NDK gnu-libstdc++
  RegExp(
    kIndent +
    (
      r'Permission to use, copy, modify, (?:distribute and sell|sell, and distribute) this software '
      r'(?:and its documentation for any purpose )?is hereby granted without fee, '
      r'provided that the above copyright notice appears? in all copies,? and '
      r'that both that copyright notice and this permission notice appear '
      r'in supporting documentation\. '
      r'(?:.+'
        r'|Hewlett-Packard Company'
        r'|Silicon Graphics'
        r'|None of the above authors, nor IBM Haifa Research Laboratories,'
      r') makes? (?:no|any) '
      r'representations? about the suitability of this software for any '
      r'(?:purpose\. It is provi)?ded "as is" without express or implied warranty\.'
      .replaceAll(' ', _linebreak)
    ),
    multiLine: true,
    caseSensitive: false
  ),

  // Seen in Android NDK
  RegExp(
    kIndent +
    r'Developed at (?:SunPro|SunSoft), a Sun Microsystems, Inc. business. *\n'
    r'^\1\2Permission to use, copy, modify, and distribute this *\n'
    r'^\1\2software is freely granted, provided that this notice *\n'
    r'^\1\2is preserved.',
    multiLine: true,
    caseSensitive: false
  ),

  // Seen in Android NDK (stlport)
  RegExp(
    kIndent +
    r'This material is provided "as is", with absolutely no warranty expressed *\n'
    r'^\1\2or implied\. +Any use is at your own risk\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2Permission to use or copy this software for any purpose is hereby granted *\n'
    r'^\1\2without fee, provided the above notices are retained on all copies\. *\n'
    r'^\1\2Permission to modify the code and to distribute modified code is granted, *\n'
    r'^\1\2provided the above notices are retained, and a notice that the code was *\n'
    r'^\1\2modified is included with the above copyright notice\.',
    multiLine: true,
    caseSensitive: false
  ),

  // freetype2.
  RegExp(
    kIndent +
    (
      r'Permission to use, copy, modify, distribute, and sell this software and its '
      r'documentation for any purpose is hereby granted without fee, provided that '
      r'the above copyright notice appear in all copies and that both that '
      r'copyright notice and this permission notice appear in supporting '
      r'documentation\. '
      r'The above copyright notice and this permission notice shall be included in '
      r'all copies or substantial portions of the Software\. '
      r'THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR '
      r'IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, '
      r'FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT\.  IN NO EVENT SHALL THE '
      r'OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN '
      r'AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN '
      r'CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE\. '
      r'Except as contained in this notice, the name of The Open Group shall not be '
      r'used in advertising or otherwise to promote the sale, use or other dealings '
      r'in this Software without prior written authorization from The Open Group\. '
      .replaceAll(' ', _linebreak)
    ),
    multiLine: true,
    caseSensitive: false
  ),

  // TODO(ianh): File a bug on what happens if you replace the // with a #
  // ICU
  RegExp(
    kIndent +
    r'This file is provided as-is by Unicode, Inc\. \(The Unicode Consortium\)\. '
    r'No claims are made as to fitness for any particular purpose\. No '
    r'warranties of any kind are expressed or implied\. The recipient '
    r'agrees to determine applicability of information provided\. If this '
    r'file has been provided on optical media by Unicode, Inc\., the sole '
    r'remedy for any claim will be exchange of defective media within 90 '
    r'days of receipt\. '
    r'Unicode, Inc\. hereby grants the right to freely use the information '
    r'supplied in this file in the creation of products supporting the '
    r'Unicode Standard, and to make copies of this file in any form for '
    r'internal or external distribution as long as this notice remains '
    r'attached\.'
    .replaceAll(' ', _linebreak),
    multiLine: true,
    caseSensitive: false
  ),

  // OpenSSL
  RegExp(
    kIndent +
    r'The portions of the attached software \("Contribution"\) is developed by *\n'
    r'^\1\2Nokia Corporation and is licensed pursuant to the OpenSSL open source *\n'
    r'^\1\2license\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2The Contribution, originally written by Mika Kousa and Pasi Eronen of *\n'
    r'^\1\2Nokia Corporation, consists of the "PSK" \(Pre-Shared Key\) ciphersuites *\n'
    r'^\1\2support \(see RFC 4279\) to OpenSSL\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2No patent licenses or other rights except those expressly stated in *\n'
    r'^\1\2the OpenSSL open source license shall be deemed granted or received *\n'
    r'^\1\2expressly, by implication, estoppel, or otherwise\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2No assurances are provided by Nokia that the Contribution does not *\n'
    r'^\1\2infringe the patent or other intellectual property rights of any third *\n'
    r'^\1\2party or that the license provides you with all the necessary rights *\n'
    r'^\1\2to make use of the Contribution\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND\. IN *\n'
    r'^\1\2ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA *\n'
    r'^\1\2SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY *\n'
    r'^\1\2OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR *\n'
    r'^\1\2OTHERWISE\.',
    multiLine: true,
    caseSensitive: false
  ),

];

final List<RegExp> csNotices = <RegExp>[

  // used with _tryInline, with needsCopyright: false
  // should have two groups, prefixes 1 and 2

  RegExp(
    kIndent +
    r'The Graphics Interchange Format\(c\) is the copyright property of CompuServe *\n'
    r'^\1\2Incorporated\. +Only CompuServe Incorporated is authorized to define, redefine, *\n'
    r'^\1\2enhance, alter, modify or change in any way the definition of the format\. *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2CompuServe Incorporated hereby grants a limited, non-exclusive, royalty-free *\n'
    r'^\1\2license for the use of the Graphics Interchange Format\(sm\) in computer *\n'
    r'^\1\2software; computer software utilizing GIF\(sm\) must acknowledge ownership of the *\n'
    r'^\1\2Graphics Interchange Format and its Service Mark by CompuServe Incorporated, in *\n'
    r'^\1\2User and Technical Documentation\. +Computer software utilizing GIF, which is *\n'
    r'^\1\2distributed or may be distributed without User or Technical Documentation must *\n'
    r'^\1\2display to the screen or printer a message acknowledging ownership of the *\n'
    r'^\1\2Graphics Interchange Format and the Service Mark by CompuServe Incorporated; in *\n'
    r'^\1\2this case, the acknowledgement may be displayed in an opening screen or leading *\n'
    r'^\1\2banner, or a closing screen or trailing banner\. +A message such as the following *\n'
    r'^\1\2may be used: *\n'
    r'^(?:(?:\1\2? *)? *\n)*'
    r'^\1\2 *"The Graphics Interchange Format\(c\) is the Copyright property of *\n'
    r'^\1\2 *CompuServe Incorporated\. +GIF\(sm\) is a Service Mark property of *\n'
    r'^\1\2 *CompuServe Incorporated\." *\n',
    multiLine: true,
    caseSensitive: false
  ),

  // NSPR
  // (Showing the entire block instead of the LGPL for this file is based
  // on advice specifically regarding the prtime.cc file.)
  RegExp(
    r'()()/\* Portions are Copyright \(C\) 2011 Google Inc \*/\n'
    r'/\* \*\*\*\*\* BEGIN LICENSE BLOCK \*\*\*\*\*\n'
    r' \* Version: MPL 1\.1/GPL 2\.0/LGPL 2\.1\n'
    r' \*\n'
    r' \* The contents of this file are subject to the Mozilla Public License Version\n'
    r' \* 1\.1 \(the "License"\); you may not use this file except in compliance with\n'
    r' \* the License\. +You may obtain a copy of the License at\n'
    r' \* http://www\.mozilla\.org/MPL/\n'
    r' \*\n'
    r' \* Software distributed under the License is distributed on an "AS IS" basis,\n'
    r' \* WITHOUT WARRANTY OF ANY KIND, either express or implied\. +See the License\n'
    r' \* for the specific language governing rights and limitations under the\n'
    r' \* License\.\n'
    r' \*\n'
    r' \* The Original Code is the Netscape Portable Runtime \(NSPR\)\.\n'
    r' \*\n'
    r' \* The Initial Developer of the Original Code is\n'
    r' \* Netscape Communications Corporation\.\n'
    r' \* Portions created by the Initial Developer are Copyright \(C\) 1998-2000\n'
    r' \* the Initial Developer\. +All Rights Reserved\.\n'
    r' \*\n'
    r' \* Contributor\(s\):\n'
    r' \*\n'
    r' \* Alternatively, the contents of this file may be used under the terms of\n'
    r' \* either the GNU General Public License Version 2 or later \(the "GPL"\), or\n'
    r' \* the GNU Lesser General Public License Version 2\.1 or later \(the "LGPL"\),\n'
    r' \* in which case the provisions of the GPL or the LGPL are applicable instead\n'
    r' \* of those above\. +If you wish to allow use of your version of this file only\n'
    r' \* under the terms of either the GPL or the LGPL, and not to allow others to\n'
    r' \* use your version of this file under the terms of the MPL, indicate your\n'
    r' \* decision by deleting the provisions above and replace them with the notice\n'
    r' \* and other provisions required by the GPL or the LGPL\. +If you do not delete\n'
    r' \* the provisions above, a recipient may use your version of this file under\n'
    r' \* the terms of any one of the MPL, the GPL or the LGPL\.\n'
    r' \*\n'
    r' \* \*\*\*\*\* END LICENSE BLOCK \*\*\*\*\* \*/\n'
  ),

  // Advice for this was "text verbatim".
  RegExp(
    kIndent +
    r'Copyright \(c\) 2015-2016 Khronos Group\. This work is licensed under a\n'
    r'\1\2Creative Commons Attribution 4\.0 International License; see\n'
    r'\1\2http://creativecommons\.org/licenses/by/4\.0/',
    multiLine: true,
    caseSensitive: false,
  ),

  // by analogy to the above one
  // seen in jsr305
  RegExp(
    kIndent +
    r'Copyright .+\n'
    r'\1\2Released under the Creative Commons Attribution License\n'
    r'\1\2 *\(?http://creativecommons\.org/licenses/by/2\.5/?\)?\n'
    r'\1\2Official home: .+',
    multiLine: true,
    caseSensitive: false,
  ),

  // Advice for this was "Just display its text as a politeness. Nothing else required".
  RegExp(
    r'()()/\* mdXhl\.c \* ----------------------------------------------------------------------------\n'
    r' \* "THE BEER-WARE LICENSE" \(Revision 42\):\n'
    r' \* <phk@FreeBSD\.org> wrote this file\. +As long as you retain this notice you\n'
    r' \* can do whatever you want with this stuff\. If we meet some day, and you think\n'
    r' \* this stuff is worth it, you can buy me a beer in return\. +Poul-Henning Kamp\n'
    r' \* ----------------------------------------------------------------------------\n'
    r' \* libjpeg-turbo Modifications:\n'
    r' \* Copyright \(C\) 2016, D\. R\. Commander\.?\n'
    r' \* Modifications are under the same license as the original code \(see above\)\n'
    r' \* ----------------------------------------------------------------------------'
  ),
];


// FALLBACK PATTERNS

final List<RegExp> csFallbacks = <RegExp>[

  // used with _tryNone
  // groups are ignored

];


// FORWARD REFERENCE

class ForwardReferencePattern {
  ForwardReferencePattern({ this.firstPrefixIndex, this.indentPrefixIndex, this.pattern, this.targetPattern });
  final int? firstPrefixIndex;
  final int? indentPrefixIndex;
  final RegExp? pattern;
  final RegExp? targetPattern;
}

final List<ForwardReferencePattern> csForwardReferenceLicenses = <ForwardReferencePattern>[

  // used with _tryForwardReferencePattern

  // OpenSSL (in Dart third_party)
  ForwardReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    pattern: RegExp(
      kIndent + r'(?:'
      +
      (
        r'Portions of the attached software \("Contribution"\) are developed by .+ and are contributed to the OpenSSL project\.'
        .replaceAll(' ', _linebreak)
      )
      +
      r'|'
      +
      (
        r'The .+ included herein is developed by .+, and is contributed to the OpenSSL project\.'
        .replaceAll(' ', _linebreak)
      )
      +
      r'|'
      r'(?:\1? *\n)+'
      r')*'
      r'\1\2 *'
      +
      (
        r'The .+ is licensed pursuant to the OpenSSL open source license provided (?:below|above)\.'
        .replaceAll(' ', _linebreak)
      ),
      multiLine: true,
      caseSensitive: false,
    ),
    targetPattern: RegExp('Redistribution and use in source and binary forms(?:.|\n)+OpenSSL')
  ),

  // libevent
  ForwardReferencePattern(
    firstPrefixIndex: 1,
    indentPrefixIndex: 2,
    pattern: RegExp(
      kIndent + r'Use is subject to license terms\.$',
      multiLine: true,
      caseSensitive: false,
    ),
    targetPattern: RegExp('Redistribution and use in source and binary forms(?:.|\n)+SUN MICROSYSTEMS')
  ),

];
