From 4199ffee8114df7615450c073c56bf15aed4d07c Mon Sep 17 00:00:00 2001 From: Sebastian Schuberth Date: Sat, 10 Aug 2024 13:49:59 +0200 Subject: [PATCH] test(scanoss): Add a test for the Winnowing function This helps to detect changes in the algorithm, e.g. on library updates. Signed-off-by: Sebastian Schuberth --- .../src/test/assets/wfp/Apache-2.0.license | 201 +++++++ .../src/test/assets/wfp/CC-BY-3.0.license | 319 +++++++++++ .../src/test/assets/wfp/CC0-1.0.license | 121 ++++ .../scanoss/src/test/kotlin/WinnowingTest.kt | 538 ++++++++++++++++++ 4 files changed, 1179 insertions(+) create mode 100644 plugins/scanners/scanoss/src/test/assets/wfp/Apache-2.0.license create mode 100644 plugins/scanners/scanoss/src/test/assets/wfp/CC-BY-3.0.license create mode 100644 plugins/scanners/scanoss/src/test/assets/wfp/CC0-1.0.license create mode 100644 plugins/scanners/scanoss/src/test/kotlin/WinnowingTest.kt diff --git a/plugins/scanners/scanoss/src/test/assets/wfp/Apache-2.0.license b/plugins/scanners/scanoss/src/test/assets/wfp/Apache-2.0.license new file mode 100644 index 0000000000000..8dada3edaf50d --- /dev/null +++ b/plugins/scanners/scanoss/src/test/assets/wfp/Apache-2.0.license @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/plugins/scanners/scanoss/src/test/assets/wfp/CC-BY-3.0.license b/plugins/scanners/scanoss/src/test/assets/wfp/CC-BY-3.0.license new file mode 100644 index 0000000000000..1a16e05564d2a --- /dev/null +++ b/plugins/scanners/scanoss/src/test/assets/wfp/CC-BY-3.0.license @@ -0,0 +1,319 @@ +Creative Commons Legal Code + +Attribution 3.0 Unported + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR + DAMAGES RESULTING FROM ITS USE. + +License + +THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE +COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY +COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS +AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. + +BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE +TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY +BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS +CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND +CONDITIONS. + +1. Definitions + + a. "Adaptation" means a work based upon the Work, or upon the Work and + other pre-existing works, such as a translation, adaptation, + derivative work, arrangement of music or other alterations of a + literary or artistic work, or phonogram or performance and includes + cinematographic adaptations or any other form in which the Work may be + recast, transformed, or adapted including in any form recognizably + derived from the original, except that a work that constitutes a + Collection will not be considered an Adaptation for the purpose of + this License. For the avoidance of doubt, where the Work is a musical + work, performance or phonogram, the synchronization of the Work in + timed-relation with a moving image ("synching") will be considered an + Adaptation for the purpose of this License. + b. "Collection" means a collection of literary or artistic works, such as + encyclopedias and anthologies, or performances, phonograms or + broadcasts, or other works or subject matter other than works listed + in Section 1(f) below, which, by reason of the selection and + arrangement of their contents, constitute intellectual creations, in + which the Work is included in its entirety in unmodified form along + with one or more other contributions, each constituting separate and + independent works in themselves, which together are assembled into a + collective whole. A work that constitutes a Collection will not be + considered an Adaptation (as defined above) for the purposes of this + License. + c. "Distribute" means to make available to the public the original and + copies of the Work or Adaptation, as appropriate, through sale or + other transfer of ownership. + d. "Licensor" means the individual, individuals, entity or entities that + offer(s) the Work under the terms of this License. + e. "Original Author" means, in the case of a literary or artistic work, + the individual, individuals, entity or entities who created the Work + or if no individual or entity can be identified, the publisher; and in + addition (i) in the case of a performance the actors, singers, + musicians, dancers, and other persons who act, sing, deliver, declaim, + play in, interpret or otherwise perform literary or artistic works or + expressions of folklore; (ii) in the case of a phonogram the producer + being the person or legal entity who first fixes the sounds of a + performance or other sounds; and, (iii) in the case of broadcasts, the + organization that transmits the broadcast. + f. "Work" means the literary and/or artistic work offered under the terms + of this License including without limitation any production in the + literary, scientific and artistic domain, whatever may be the mode or + form of its expression including digital form, such as a book, + pamphlet and other writing; a lecture, address, sermon or other work + of the same nature; a dramatic or dramatico-musical work; a + choreographic work or entertainment in dumb show; a musical + composition with or without words; a cinematographic work to which are + assimilated works expressed by a process analogous to cinematography; + a work of drawing, painting, architecture, sculpture, engraving or + lithography; a photographic work to which are assimilated works + expressed by a process analogous to photography; a work of applied + art; an illustration, map, plan, sketch or three-dimensional work + relative to geography, topography, architecture or science; a + performance; a broadcast; a phonogram; a compilation of data to the + extent it is protected as a copyrightable work; or a work performed by + a variety or circus performer to the extent it is not otherwise + considered a literary or artistic work. + g. "You" means an individual or entity exercising rights under this + License who has not previously violated the terms of this License with + respect to the Work, or who has received express permission from the + Licensor to exercise rights under this License despite a previous + violation. + h. "Publicly Perform" means to perform public recitations of the Work and + to communicate to the public those public recitations, by any means or + process, including by wire or wireless means or public digital + performances; to make available to the public Works in such a way that + members of the public may access these Works from a place and at a + place individually chosen by them; to perform the Work to the public + by any means or process and the communication to the public of the + performances of the Work, including by public digital performance; to + broadcast and rebroadcast the Work by any means including signs, + sounds or images. + i. "Reproduce" means to make copies of the Work by any means including + without limitation by sound or visual recordings and the right of + fixation and reproducing fixations of the Work, including storage of a + protected performance or phonogram in digital form or other electronic + medium. + +2. Fair Dealing Rights. Nothing in this License is intended to reduce, +limit, or restrict any uses free from copyright or rights arising from +limitations or exceptions that are provided for in connection with the +copyright protection under copyright law or other applicable laws. + +3. License Grant. Subject to the terms and conditions of this License, +Licensor hereby grants You a worldwide, royalty-free, non-exclusive, +perpetual (for the duration of the applicable copyright) license to +exercise the rights in the Work as stated below: + + a. to Reproduce the Work, to incorporate the Work into one or more + Collections, and to Reproduce the Work as incorporated in the + Collections; + b. to create and Reproduce Adaptations provided that any such Adaptation, + including any translation in any medium, takes reasonable steps to + clearly label, demarcate or otherwise identify that changes were made + to the original Work. For example, a translation could be marked "The + original work was translated from English to Spanish," or a + modification could indicate "The original work has been modified."; + c. to Distribute and Publicly Perform the Work including as incorporated + in Collections; and, + d. to Distribute and Publicly Perform Adaptations. + e. For the avoidance of doubt: + + i. Non-waivable Compulsory License Schemes. In those jurisdictions in + which the right to collect royalties through any statutory or + compulsory licensing scheme cannot be waived, the Licensor + reserves the exclusive right to collect such royalties for any + exercise by You of the rights granted under this License; + ii. Waivable Compulsory License Schemes. In those jurisdictions in + which the right to collect royalties through any statutory or + compulsory licensing scheme can be waived, the Licensor waives the + exclusive right to collect such royalties for any exercise by You + of the rights granted under this License; and, + iii. Voluntary License Schemes. The Licensor waives the right to + collect royalties, whether individually or, in the event that the + Licensor is a member of a collecting society that administers + voluntary licensing schemes, via that society, from any exercise + by You of the rights granted under this License. + +The above rights may be exercised in all media and formats whether now +known or hereafter devised. The above rights include the right to make +such modifications as are technically necessary to exercise the rights in +other media and formats. Subject to Section 8(f), all rights not expressly +granted by Licensor are hereby reserved. + +4. Restrictions. The license granted in Section 3 above is expressly made +subject to and limited by the following restrictions: + + a. You may Distribute or Publicly Perform the Work only under the terms + of this License. You must include a copy of, or the Uniform Resource + Identifier (URI) for, this License with every copy of the Work You + Distribute or Publicly Perform. You may not offer or impose any terms + on the Work that restrict the terms of this License or the ability of + the recipient of the Work to exercise the rights granted to that + recipient under the terms of the License. You may not sublicense the + Work. You must keep intact all notices that refer to this License and + to the disclaimer of warranties with every copy of the Work You + Distribute or Publicly Perform. When You Distribute or Publicly + Perform the Work, You may not impose any effective technological + measures on the Work that restrict the ability of a recipient of the + Work from You to exercise the rights granted to that recipient under + the terms of the License. This Section 4(a) applies to the Work as + incorporated in a Collection, but this does not require the Collection + apart from the Work itself to be made subject to the terms of this + License. If You create a Collection, upon notice from any Licensor You + must, to the extent practicable, remove from the Collection any credit + as required by Section 4(b), as requested. If You create an + Adaptation, upon notice from any Licensor You must, to the extent + practicable, remove from the Adaptation any credit as required by + Section 4(b), as requested. + b. If You Distribute, or Publicly Perform the Work or any Adaptations or + Collections, You must, unless a request has been made pursuant to + Section 4(a), keep intact all copyright notices for the Work and + provide, reasonable to the medium or means You are utilizing: (i) the + name of the Original Author (or pseudonym, if applicable) if supplied, + and/or if the Original Author and/or Licensor designate another party + or parties (e.g., a sponsor institute, publishing entity, journal) for + attribution ("Attribution Parties") in Licensor's copyright notice, + terms of service or by other reasonable means, the name of such party + or parties; (ii) the title of the Work if supplied; (iii) to the + extent reasonably practicable, the URI, if any, that Licensor + specifies to be associated with the Work, unless such URI does not + refer to the copyright notice or licensing information for the Work; + and (iv) , consistent with Section 3(b), in the case of an Adaptation, + a credit identifying the use of the Work in the Adaptation (e.g., + "French translation of the Work by Original Author," or "Screenplay + based on original Work by Original Author"). The credit required by + this Section 4 (b) may be implemented in any reasonable manner; + provided, however, that in the case of a Adaptation or Collection, at + a minimum such credit will appear, if a credit for all contributing + authors of the Adaptation or Collection appears, then as part of these + credits and in a manner at least as prominent as the credits for the + other contributing authors. For the avoidance of doubt, You may only + use the credit required by this Section for the purpose of attribution + in the manner set out above and, by exercising Your rights under this + License, You may not implicitly or explicitly assert or imply any + connection with, sponsorship or endorsement by the Original Author, + Licensor and/or Attribution Parties, as appropriate, of You or Your + use of the Work, without the separate, express prior written + permission of the Original Author, Licensor and/or Attribution + Parties. + c. Except as otherwise agreed in writing by the Licensor or as may be + otherwise permitted by applicable law, if You Reproduce, Distribute or + Publicly Perform the Work either by itself or as part of any + Adaptations or Collections, You must not distort, mutilate, modify or + take other derogatory action in relation to the Work which would be + prejudicial to the Original Author's honor or reputation. Licensor + agrees that in those jurisdictions (e.g. Japan), in which any exercise + of the right granted in Section 3(b) of this License (the right to + make Adaptations) would be deemed to be a distortion, mutilation, + modification or other derogatory action prejudicial to the Original + Author's honor and reputation, the Licensor will waive or not assert, + as appropriate, this Section, to the fullest extent permitted by the + applicable national law, to enable You to reasonably exercise Your + right under Section 3(b) of this License (right to make Adaptations) + but not otherwise. + +5. Representations, Warranties and Disclaimer + +UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR +OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY +KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, +INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, +FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF +LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, +WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION +OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. + +6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE +LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR +ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES +ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS +BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +7. Termination + + a. This License and the rights granted hereunder will terminate + automatically upon any breach by You of the terms of this License. + Individuals or entities who have received Adaptations or Collections + from You under this License, however, will not have their licenses + terminated provided such individuals or entities remain in full + compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will + survive any termination of this License. + b. Subject to the above terms and conditions, the license granted here is + perpetual (for the duration of the applicable copyright in the Work). + Notwithstanding the above, Licensor reserves the right to release the + Work under different license terms or to stop distributing the Work at + any time; provided, however that any such election will not serve to + withdraw this License (or any other license that has been, or is + required to be, granted under the terms of this License), and this + License will continue in full force and effect unless terminated as + stated above. + +8. Miscellaneous + + a. Each time You Distribute or Publicly Perform the Work or a Collection, + the Licensor offers to the recipient a license to the Work on the same + terms and conditions as the license granted to You under this License. + b. Each time You Distribute or Publicly Perform an Adaptation, Licensor + offers to the recipient a license to the original Work on the same + terms and conditions as the license granted to You under this License. + c. If any provision of this License is invalid or unenforceable under + applicable law, it shall not affect the validity or enforceability of + the remainder of the terms of this License, and without further action + by the parties to this agreement, such provision shall be reformed to + the minimum extent necessary to make such provision valid and + enforceable. + d. No term or provision of this License shall be deemed waived and no + breach consented to unless such waiver or consent shall be in writing + and signed by the party to be charged with such waiver or consent. + e. This License constitutes the entire agreement between the parties with + respect to the Work licensed here. There are no understandings, + agreements or representations with respect to the Work not specified + here. Licensor shall not be bound by any additional provisions that + may appear in any communication from You. This License may not be + modified without the mutual written agreement of the Licensor and You. + f. The rights granted under, and the subject matter referenced, in this + License were drafted utilizing the terminology of the Berne Convention + for the Protection of Literary and Artistic Works (as amended on + September 28, 1979), the Rome Convention of 1961, the WIPO Copyright + Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 + and the Universal Copyright Convention (as revised on July 24, 1971). + These rights and subject matter take effect in the relevant + jurisdiction in which the License terms are sought to be enforced + according to the corresponding provisions of the implementation of + those treaty provisions in the applicable national law. If the + standard suite of rights granted under applicable copyright law + includes additional rights not granted under this License, such + additional rights are deemed to be included in the License; this + License is not intended to restrict the license of any rights under + applicable law. + + +Creative Commons Notice + + Creative Commons is not a party to this License, and makes no warranty + whatsoever in connection with the Work. Creative Commons will not be + liable to You or any party on any legal theory for any damages + whatsoever, including without limitation any general, special, + incidental or consequential damages arising in connection to this + license. Notwithstanding the foregoing two (2) sentences, if Creative + Commons has expressly identified itself as the Licensor hereunder, it + shall have all rights and obligations of Licensor. + + Except for the limited purpose of indicating to the public that the + Work is licensed under the CCPL, Creative Commons does not authorize + the use by either party of the trademark "Creative Commons" or any + related trademark or logo of Creative Commons without the prior + written consent of Creative Commons. Any permitted use will be in + compliance with Creative Commons' then-current trademark usage + guidelines, as may be published on its website or otherwise made + available upon request from time to time. For the avoidance of doubt, + this trademark restriction does not form part of this License. + + Creative Commons may be contacted at https://creativecommons.org/. diff --git a/plugins/scanners/scanoss/src/test/assets/wfp/CC0-1.0.license b/plugins/scanners/scanoss/src/test/assets/wfp/CC0-1.0.license new file mode 100644 index 0000000000000..0e259d42c9967 --- /dev/null +++ b/plugins/scanners/scanoss/src/test/assets/wfp/CC0-1.0.license @@ -0,0 +1,121 @@ +Creative Commons Legal Code + +CC0 1.0 Universal + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS + PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM + THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED + HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator +and subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for +the purpose of contributing to a commons of creative, cultural and +scientific works ("Commons") that the public can reliably and without fear +of later claims of infringement build upon, modify, incorporate in other +works, reuse and redistribute as freely as possible in any form whatsoever +and for any purposes, including without limitation commercial purposes. +These owners may contribute to the Commons to promote the ideal of a free +culture and the further production of creative, cultural and scientific +works, or to gain reputation or greater distribution for their Work in +part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any +expectation of additional consideration or compensation, the person +associating CC0 with a Work (the "Affirmer"), to the extent that he or she +is an owner of Copyright and Related Rights in the Work, voluntarily +elects to apply CC0 to the Work and publicly distribute the Work under its +terms, with knowledge of his or her Copyright and Related Rights in the +Work and the meaning and intended legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not +limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + ii. moral rights retained by the original author(s) and/or performer(s); +iii. publicity and privacy rights pertaining to a person's image or + likeness depicted in a Work; + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + v. rights protecting the extraction, dissemination, use and reuse of data + in a Work; + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation + thereof, including any amended or successor version of such + directive); and +vii. other similar, equivalent or corresponding rights throughout the + world based on applicable law or treaty, and any national + implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention +of, applicable law, Affirmer hereby overtly, fully, permanently, +irrevocably and unconditionally waives, abandons, and surrenders all of +Affirmer's Copyright and Related Rights and associated claims and causes +of action, whether now known or unknown (including existing as well as +future claims and causes of action), in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or future +medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional +purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each +member of the public at large and to the detriment of Affirmer's heirs and +successors, fully intending that such Waiver shall not be subject to +revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason +be judged legally invalid or ineffective under applicable law, then the +Waiver shall be preserved to the maximum extent permitted taking into +account Affirmer's express Statement of Purpose. In addition, to the +extent the Waiver is so judged Affirmer hereby grants to each affected +person a royalty-free, non transferable, non sublicensable, non exclusive, +irrevocable and unconditional license to exercise Affirmer's Copyright and +Related Rights in the Work (i) in all territories worldwide, (ii) for the +maximum duration provided by applicable law or treaty (including future +time extensions), (iii) in any current or future medium and for any number +of copies, and (iv) for any purpose whatsoever, including without +limitation commercial, advertising or promotional purposes (the +"License"). The License shall be deemed effective as of the date CC0 was +applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder +of the License, and in such case Affirmer hereby affirms that he or she +will not (i) exercise any of his or her remaining Copyright and Related +Rights in the Work or (ii) assert any associated claims and causes of +action with respect to the Work, in either case contrary to Affirmer's +express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + b. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, + statutory or otherwise, including without limitation warranties of + title, merchantability, fitness for a particular purpose, non + infringement, or the absence of latent or other defects, accuracy, or + the present or absence of errors, whether or not discoverable, all to + the greatest extent permissible under applicable law. + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without + limitation any person's Copyright and Related Rights in the Work. + Further, Affirmer disclaims responsibility for obtaining any necessary + consents, permissions or other rights required for any use of the + Work. + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to + this CC0 or use of the Work. diff --git a/plugins/scanners/scanoss/src/test/kotlin/WinnowingTest.kt b/plugins/scanners/scanoss/src/test/kotlin/WinnowingTest.kt new file mode 100644 index 0000000000000..2dc22664e7271 --- /dev/null +++ b/plugins/scanners/scanoss/src/test/kotlin/WinnowingTest.kt @@ -0,0 +1,538 @@ +/* + * Copyright (C) 2024 The ORT Project Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * License-Filename: LICENSE + */ + +package org.ossreviewtoolkit.scanner.scanners.scanoss + +import com.scanoss.Winnowing + +import io.kotest.core.spec.style.StringSpec +import io.kotest.matchers.shouldBe + +import java.io.File + +private val winnowing = Winnowing.builder().build() + +private fun calculate(file: File) = winnowing.wfpForFile(file.path, file.name) + +class WinnowingTest : StringSpec({ + "The fingerprint should be calculated correctly for the Apache-2.0 license text" { + calculate(File("src/test/assets/wfp/Apache-2.0.license")) shouldBe """ + file=c4082b6c254c9fb71136710391d9728b,11558,Apache-2.0.license + 5=33193f1b,1716113f,0c557e09 + 9=643a45ae,2ae8e84a,bacd17ac + 10=c54959e6,c8c4ada9 + 12=095e9c9e,10754b25 + 13=8de4c91b + 15=1906f673,b70c2c99 + 17=82844dcf,9d75ed8c + 18=e09ca533,163fd100,e3ab20a5 + 19=9aa08fa2 + 20=dfb7c8e2 + 21=62a267bf,89999f72 + 23=fa77a2c6 + 24=780b3e93 + 26=f9722399,cad7579b,a73214cc,a3cd5e97 + 28=08f2243a + 30=0fad4d4c,0ed8d3be + 32=dd22b5a4,97fc9200 + 35=cdb44ffc,78a155f0 + 36=4d1ab0e2 + 37=6a9de676,a8ec6cfd + 38=c9befb24 + 40=6e2db6c0 + 41=ebbea868,46493752 + 42=0f422343 + 43=075081b0 + 44=42d0762e,7440b7b9,63517188 + 45=165b2ad4,edf3c34c + 46=e1c66bc4 + 48=622f4a87 + 49=cd74d072,a4b7a885,91d65b18 + 50=78292613 + 51=b4ef74e6 + 52=2aaf3e45,6fe9ce24,f96a3d30 + 53=21c17277 + 54=d40c1035,60aff2a9 + 55=7f733a47,9344b1df,eb9357ec,e51a39b1,09460717 + 56=8ad000d9,c785f8e6,e4532416 + 57=5e702dd7 + 58=2f6e9882,7a964a06,708b34c0 + 59=188207f5,d4c28400 + 60=f4758426,9a99d40c + 62=996ce703,e24cad4b + 63=3fe90b35,85eed91b + 64=9daab9e2 + 66=e944b576,09ec5b5b + 68=1e2e9525,85b8711d + 69=519c4a94,18c48e24,8089bd5b + 70=464418d4 + 71=f59e453b + 73=e7e9e58b,4d46954e,09ec5b5b + 75=1e2e9525,85b8711d + 76=519c4a94,65fed3d8 + 77=d86789c1,c03adbf1 + 78=e8abf2cc,6132f953 + 79=4a3a6437,1d0ec63f + 80=961dfaa7 + 81=88805158,413325d7,9d0a82fa,2715bb0e + 83=459e6ad4,8d4e7642 + 84=3746bff1 + 85=0293b704,e5d56bac,a4ada2fd + 86=fb10d563,e158cdb1 + 87=4c54b951,dffe695b + 90=868d4d34,2031e5cc,fab79c22 + 91=49754210,75c8c3a2 + 94=d4f9c2cf,1e035e8c + 97=0b6589d1,3f5a04e8,ff3a0280 + 100=847627e2,308b3a5b + 101=87eb119e + 102=a83f8a22 + 103=9641afec + 106=c95fb1b1,18ee73d3 + 107=2e03d45a,87eb119e,365a6794 + 108=0b7da30f + 109=63cde0e4,2be61d91,c95fb1b1 + 110=114d09d2 + 112=7a48523d,7115bf81 + 113=b5ee6564,b1de8d55 + 115=6acd7f03,214ef97e,7f260a40 + 116=59c1c016,74a954f8 + 117=2c89593a,7f46ecf0 + 118=2e3a07bf,87f2a81f + 119=e106d187,7a534d67 + 120=f0ee62b1,2201f7a1 + 123=d3ffcd2d,37d5a047 + 124=8739f582 + 125=7c7eb915,69232603 + 126=263d8c6d + 127=8e789e91,51d5f695,66be4909 + 128=af50e92f + 130=a45daefd + 131=5e7a2cb7,3ef85c88 + 132=052ff589 + 133=7fa59123 + 134=4f6b9e7a,e0828558,89c2f58e + 135=b6c0ec4e + 136=a65c75c1,895a98a4 + 139=d2ad211e,8c145b15 + 140=08b6afb1 + 141=475f127b,5ee108a6 + 143=65cb6303 + 144=efcc7681,2205d383,ff5dfccd,17609495 + 146=57b9fa12 + 147=a6ecc461,396fcc7e,22ba3918 + 148=e91d2c20 + 149=485a7102,505a3c9b,a5e0ae3b + 151=161f0f33,b5609d22,c28cfd88 + 153=dbb3d3eb + 154=3ecbfcdc + 155=8bb06c37,e24b9112,d84c0611 + 156=fcfb88a6 + 157=cf4eda1e,769eb0a3,5743ecc8 + 158=986b4ce7 + 159=6d717d98,761da93f,d2c51d9d + 161=5e153bd1,e0d6f354,6a77b096 + 162=b93373f6,767707a3 + 163=d9d542cd + 165=0fd68808,f7e266d8 + 167=c723e5df + 168=b0de22c2,a1a1527c + 169=e46356e3,44c2f10a,fe79d01e,97281b1d + 171=38dfdc96,b23c851e,3049cb0a,44d62a74,e99d13ed + 172=adb77f40,6b56e70e + 173=c324ee9c + 174=74544c0c + 176=c0571d2a + 178=dbc9bd6f,a1108271 + 180=3017532e + 181=cdd249e9 + 182=708e7097,96570df0 + 183=7ac2159e + 184=40cd3f42,c453dac3 + 185=80c8be5e,2564c555 + 186=58537bf5,a556181e + 187=f8726ff7 + 189=096d9c95,b353c2c1 + 191=d1e03b12 + 192=fb0d20c4 + 193=028ead5a,cab55853,d7aead00 + 195=93951dcd + 197=ff5dfccd,064b3e26 + 199=d3f942b8,8fe9d4f5,2a9536b0 + 200=abbf89cb,579ca428 + + """.trimIndent() + } + + "The fingerprint should be calculated correctly for the CC-BY-3.0 license text" { + calculate(File("src/test/assets/wfp/CC-BY-3.0.license")) shouldBe """ + file=3d45b71994c4e442eb721c8dfb176ec4,19786,CC-BY-3.0.license + 5=996e9d8b,1a6dc238 + 6=70a3753f,14d9bf35,0dbf4b11,d58971b7,86fbc9f3 + 8=38a05276,065a11d9 + 9=40be60c9 + 12=209acf93 + 14=7c3a24a3 + 15=c38cf970,466ca7dc + 16=919511d3,8a9102e8,40b284be,d9266ff1,805b32ad + 19=86eacf9b,c81b73e2 + 20=1e033450,5795e718,5aca67b8 + 22=3fd2e8a4,343551a3,64b16514,e3f1b701 + 27=a76c7c2d + 28=bd096f88,5e546ea2 + 29=1437d5f9,325cf2e3 + 30=a733b3e5,25af8372 + 31=be495901 + 32=3c339748,4f4653d0 + 33=6fa5686e,8645a350 + 34=f860eb15,8b9b1694,d893b55f + 36=77a04aee,c8127973 + 37=69082aaf,a6e7784d + 38=6e81d7a2,d893b55f + 39=e16ee1b1 + 40=ba81dae3,43e4637c + 41=04e45076 + 42=311db27a,73be7e0f + 43=0a4ed7ad,d3fd5534 + 44=7e0fd8c0,cca26f8e + 45=2fd3017e + 46=16e05ee5,47fade55 + 47=ce09763d,ff2a6946 + 48=8b9b1694,423df531 + 50=f2718c09 + 51=889fc712,71405538 + 53=37b1c352,caac3e6a,c616211c,341fa48a + 54=cdee6dd5 + 55=315930af,8741ac46 + 57=341fa48a,cea2ca24 + 58=343016f4,be498bd4 + 60=854cc811,6153e6d2,71d402b5,bbcc9383,b132c5be + 61=bdcf408f + 62=6e2805d2 + 63=e6a59edd,af9d954a,cc21cbf4,9397cfc1 + 64=be52a47c + 65=2971bc06 + 66=f2d04fa4,d362e8e2 + 67=6a383757 + 68=2c1eb7a2,e6076e1d,4d95288f + 69=4416e808 + 70=a0f7c877 + 71=d6531bb9 + 72=a0b8ea06,e0b0c0ed + 73=589ba8bb + 75=9923bbfe,b76d2c92,78daf969 + 76=2b9583f1 + 77=5b224371 + 78=548057a9,56f711d8,575d37e2 + 79=65cf1e0b + 80=cf287ae2 + 81=eeab16c0,bb39b03f,c158f555,89894fe3 + 82=ee951a68 + 83=4e2d65ef + 84=04223a61 + 85=98df7fd7,889d0fca + 86=1aa726dd,8196acca,7732fb2e + 88=25b4c65c,438ff750,13226cc8 + 90=2a6d52d6,1536466a,4cd9d222 + 91=0e17a9b4 + 92=f8d4430e,8e2b9262,337ee49e + 93=d8d0241d + 94=ccf7fcd4 + 95=27d161a1,d82c7466,eaf25271 + 96=e82e47bb + 98=1d3562d1 + 99=0f2de545,2ed05c37,cc4fa387 + 100=d7b89c5a,9651375c + 101=8e9d2f99,3857dc7d + 102=e5ec2f61 + 104=fd0e0a0a + 105=71097e12,86031b43 + 106=86f7b777 + 107=8b339abb,767f1ccc + 109=09ec5b5b + 110=4a75259d + 111=5b540506,2f330cd6 + 112=1e8baa7a + 114=8ca02d83,d181a2ee + 115=9cce42a1 + 117=86a1a220,26c8f4ce + 118=e9bb38f0,6c3b792d + 119=80245504,b7c4275d + 120=e512cb20 + 122=7b877508,b7d64ff2 + 123=7f7faa51,3c8a15d6,b945dac8 + 125=3a6885fa + 128=595d9c7d,b1c3131a,b1054311 + 130=176b4d65 + 131=552322c3 + 132=39d3391c,d3c119e3,6dba98be + 133=3612d955,b1054311 + 135=176b4d65,cfc872a6,e1f534e6 + 137=6dba98be + 138=69f8020d + 139=8110b212 + 140=ac47da61,58d0d53e + 142=3f7323d4,dc6e88e2,3612d955 + 144=23847681 + 145=a81007f6,6c109f94 + 146=db901615 + 147=a190783a,469aeb91 + 150=7af883f2,81742c47 + 151=30b7f89d + 153=6a258a8d,6d79dbfb,2b667545 + 154=bd96fe24,bf50ef4b + 156=874b2db0,53a48725,0a36b9f1 + 157=7db83c86,61311f6a + 158=53159e1d,463f1815 + 160=96fc5a94,e7a6c096 + 161=e1407d9a,afc0b125,8cf1412a,6edf7576 + 162=53a48725 + 163=990299a3 + 164=ffbcb502,72b6eee7 + 165=4a3b96da,926c873e,463f1815 + 166=96fc5a94 + 167=91937c8e + 168=74dcd511 + 169=f75176d3,c7c9d5e4,422c8308,ec7707d2 + 170=ecb75d36 + 172=fbdf710e + 173=1838c008 + 174=280c0db6,efed2463 + 175=2b9ae0e2 + 176=cc0d7f48 + 177=c07bb49f,eba7bf30 + 178=621cba11 + 179=a3389cbf + 180=b25341c0,c3c6b3c1 + 181=ca375f87,e79f8103 + 182=bd59471e,ad31744a + 183=21542008 + 184=62e0f9b9 + 185=17756753,1a8e5ecd + 187=ad71497e + 188=3b7d49b7,0f7cedec,32551f09 + 190=2b75c595,d74f5df2,e49a28fc + 191=54c31657 + 192=89456130 + 193=e299a9b1,b483acc3 + 194=d3751394 + 195=9220c7d5,5f22cc60,ab9d29f4 + 196=656ea59e + 197=18e4e674,20c125a0 + 199=5c0e6186 + 200=333fbfdf,e90be40d + 201=4358912a + 202=44779d50,65aa76d8 + 203=3cc50754 + 205=97ba92f3,88978d3b + 206=fcb49efa,0ae679c9,78299c2c + 207=2e19de94,c236b6be + 208=5db5515f + 209=cc0d7f48 + 210=168ba04d,3746c6a4 + 211=d3701d39,19b53075 + 212=6ee318eb,9badb5d4,1bbd31d5 + 213=b5058d7f + 214=38a53b6c + 215=c5d90cde + 216=a7630a58 + 217=d3cf1631,80085603,5e287c2d + 218=fdafa926 + 219=6b19f33f + 220=d9e8eacd,ad4c22f9 + 224=899e2509,5b166640 + 225=de7b5976 + 226=4aef1372,06df53b1,f45611af + 227=6bd3b904,a698df65 + 228=e284984a,d29facaa + 229=a2917cc1,52caa4e1,445f6090 + 230=9f83005f,cc043ccf,d39c8033 + 231=e33f8a80,ad16bc58 + 234=f13448ee,a3b2393e + 235=e60b5450 + 236=8116203f,edb253ba + 237=0bc3223d + 239=2a65df10,b3214933 + 241=0bc1f684 + 242=47ab5082,7324b121,2439b300 + 243=af0be73d + 244=55af4b2b,d284dcc1,c316abc4,5d0233ec + 245=43dc755c + 246=69eb4bf0,35aab8a1 + 248=cdaf5893,ad730d35,d380d0d0,ef5d7c8c + 249=965063b4,adb6a6e6 + 250=63d3be03,f987694f,46317da9 + 251=86de27f3 + 252=b9402f7f,2738bc91,80ecbcba + 254=bd105c74,53238d58 + 255=4ef2cc2d,e4dd3a43,e9368d53,8ef1a17d + 260=edff6af2 + 261=2b667545,b704d0d4,f6121499 + 262=0aa0b189 + 263=f505f5b7,98f19e72 + 264=9607fe02 + 265=d0e120ca + 266=75a37628,539c9984 + 267=63bb8001,d056a503 + 268=82c4bda0,db23ee3b + 269=a794639c + 270=90b2477b + 272=1d7a9b2b + 273=cb585c7c,d337b261 + 274=3bacf32d + 275=3c85e934 + 276=3e9d915f + 277=407e50ab,100b3e9c + 278=d919c919,41f7f6c9 + 279=ffe655c1 + 280=bb75b62b + 281=fd8c0eda,80aed826 + 282=9d2a4ec0,fc329cad + 283=3c9dec21,0837ec68 + 284=e617b189 + 285=297feecf + 286=70c176ac,73da16c5 + 287=7bc01c8f,f6603bb6,2ee66c0e,25e6770b + 288=762ae77c + 289=cf2c5941,ef58f204 + 290=957fe931,573c80e6 + 292=798fd442,4b8de504,7719c7c5 + 293=791f94a8,13eee247,1ecbd858 + 294=12768726 + 298=0d58979d + 300=7a01f934,01bf219a,44c62e84,4f021f05 + 302=aee2f91d,9c543eee + 303=45466d3c,b5bb169a + 304=a288071d + 305=4c51082e + 306=27116cb3 + 307=e33456c6 + 309=8846fe22,adfed4fe,8f5562d9,9f621163 + 310=4179947d + 311=09153697 + 312=db17de6c + 313=67511552,28cf7201,abaa6931 + 314=e590f3ed + 315=37d4e6f9,7a9ff9f5 + 316=541c72ce + 317=2c82086e,9b8228d3 + 319=2d3b840b,cb841dec + + """.trimIndent() + } + + "The fingerprint should be calculated correctly for the CC0-1.0 license text" { + calculate(File("src/test/assets/wfp/CC0-1.0.license")) shouldBe """ + file=473a7959b44c2f42c375d904305b6307,7169,CC0-1.0.license + 5=c44c7323 + 6=14d9bf35 + 7=1d6e19cb,38a05276 + 8=065a11d9 + 9=bb5f13c1 + 10=7db36d89,aa5b36c9 + 11=33cfe91a + 14=43d12039 + 16=7db36d89,30d23b21 + 17=a818fd54,cb3a7115,098441a4 + 18=2fb2e0bb + 21=1c7207c7,5736dc99 + 22=139d11cc + 23=e05c4e35,3221f897 + 24=0bc7f7ef,91c22c66 + 25=889e9292,fb78a9a8 + 26=f8cf56bd,8695d351 + 27=2f00f3f1,3f944751 + 28=0923fbec + 29=1f503e82 + 30=3d809087 + 33=1f5db1b7,ca2ad119,9f0ff4c1 + 34=1700986e + 35=75633a45,a8fbcf7b,add97031 + 36=85d65926 + 37=c88a8b41 + 38=d3a6c6bf + 40=3cc3df6c + 41=48042820,45a483b5 + 42=722c6ddd + 45=a6a01610,9be667ba,259a5ac4,5fadd477 + 46=cff364a8,a61fd041 + 48=072cad4c,56ed4956 + 49=3390b0cf,caa1d132 + 50=cf6f0603 + 51=538fd978 + 52=f60cf72f,327af033,8a176fd7 + 54=bdd8dca2 + 55=9628d1be + 56=65050571 + 57=fd635378,2bbdf2a1 + 59=dcc04784,74d5cd39,dc187445 + 60=52ff94f7 + 63=a168b733,7e784f7b,450f69d9,60ab1abc,c952870d + 64=2ab39860 + 65=1b9b893a,325d658b,42121a08 + 66=89eceb5c + 67=3191395e,2a4b62c6 + 68=6286c287,9972a7b0,4fe7c50a,d513d7f3 + 69=a45e9291,2a2e383b,5059af46 + 70=d19d3dd5,ef00c817 + 71=f60b915b,e3cc37a2,0ddcd8df + 72=97af6902 + 73=9d9ee982,516aa568 + 74=0980ff73 + 75=760feeeb,55adea99,44c3b807,b30b6791 + 76=65cfd0e4 + 77=461cc264,3ee9980b,a79a308d,1edd9e65,86690957 + 80=e168f267,18784c86,847aed33 + 81=850d8cd9,adb25e23 + 82=7b314865,b1de7221,9a7a3674 + 83=c936492c + 85=b700c2ef,974d6b2c + 86=0d75820a,7dd64491,ef84ebd0,04ced238 + 87=2efdfc76 + 88=26a458d4,5059af46 + 89=d19d3dd5,ef00c817,f60b915b + 90=e3cc37a2,0ddcd8df + 91=97af6902 + 92=9d9ee982,43be1c4a + 93=cf946710,f50cca3c + 94=7b314865 + 95=b3bec093 + 96=5ecc4398 + 97=78b6dcbe,ce41d270 + 98=b53ed60a + 99=cfd2dfef,e2c82dd1 + 100=9803f273 + 104=cce3ad3b + 105=af15bbef + 106=4513d528 + 107=769941fa,06df53b1,f45611af + 109=6bd3b904,a698df65,48b87598 + 110=52caa4e1,445f6090 + 111=9f83005f,cc043ccf + 112=baad98c2 + 113=156709bb,eeb66aac,d55eefd5,ae082682,35b158d2,4cfcf316 + 115=e45f57a3,f4e50e4c + 116=3063852a,d55eefd5 + 117=0059f54e + 119=bf9b23a6,39b4f1a5 + 120=50e115ee + + """.trimIndent() + } +})