Binary files sprng5.orig/.DS_Store and sprng5/.DS_Store differ diff -urN sprng5.orig/EXAMPLES/F77/Makefile.am sprng5/EXAMPLES/F77/Makefile.am --- sprng5.orig/EXAMPLES/F77/Makefile.am 2018-07-21 17:42:28.000000000 +0000 +++ sprng5/EXAMPLES/F77/Makefile.am 2021-06-08 16:48:23.000000000 +0000 @@ -13,47 +13,47 @@ convertf_tmp_SOURCES = convertf.F ../../include/sprng_f.h genf_types_menu.h convertf_tmp_FFLAGS = $(FFPSIZE) -I$(INCLUDEDIR) -convertf_tmp_LDADD = -L$(LIBDIR) -l$(GEN) -lstdc++ +convertf_tmp_LDADD = -L$(LIBDIR) -l$(GEN) -lstdc++ $(MPI_CXXLIB) convertf_tmp_LDFLAGS = pif_simple_tmp_SOURCES = pif-simple.F ../../include/sprng_f.h genf_types_menu.h pif_simple_tmp_FFLAGS = $(FFPSIZE) -I$(INCLUDEDIR) -pif_simple_tmp_LDADD = -L$(LIBDIR) -l$(GEN) -lstdc++ +pif_simple_tmp_LDADD = -L$(LIBDIR) -l$(GEN) -lstdc++ $(MPI_CXXLIB) pif_simple_tmp_LDFLAGS = seedf_tmp_SOURCES = seedf.F ../../include/sprng_f.h genf_types_menu.h seedf_tmp_FFLAGS = $(FFPSIZE) -I$(INCLUDEDIR) -seedf_tmp_LDADD = -L$(LIBDIR) -l$(GEN) -lstdc++ +seedf_tmp_LDADD = -L$(LIBDIR) -l$(GEN) -lstdc++ $(MPI_CXXLIB) seedf_tmp_LDFLAGS = seedf_simple_tmp_SOURCES = seedf-simple.F ../../include/sprng_f.h genf_types_menu.h seedf_simple_tmp_FFLAGS = $(FFPSIZE) -I$(INCLUDEDIR) -seedf_simple_tmp_LDADD = -L$(LIBDIR) -l$(GEN) -lstdc++ +seedf_simple_tmp_LDADD = -L$(LIBDIR) -l$(GEN) -lstdc++ $(MPI_CXXLIB) seedf_simple_tmp_LDFLAGS = simplef_simple_tmp_SOURCES = simplef-simple.F ../../include/sprng_f.h genf_types_menu.h simplef_simple_tmp_FFLAGS = $(FFPSIZE) -I$(INCLUDEDIR) -simplef_simple_tmp_LDADD = -L$(LIBDIR) -l$(GEN) -lstdc++ +simplef_simple_tmp_LDADD = -L$(LIBDIR) -l$(GEN) -lstdc++ $(MPI_CXXLIB) simplef_simple_tmp_LDFLAGS = spawnf_tmp_SOURCES = spawnf.F ../../include/sprng_f.h genf_types_menu.h spawnf_tmp_FFLAGS = $(FFPSIZE) -I$(INCLUDEDIR) -spawnf_tmp_LDADD = -L$(LIBDIR) -l$(GEN) -lstdc++ +spawnf_tmp_LDADD = -L$(LIBDIR) -l$(GEN) -lstdc++ $(MPI_CXXLIB) spawnf_tmp_LDFLAGS = subroutinef_tmp_SOURCES = subroutinef.F ../../include/sprng_f.h genf_types_menu.h subroutinef_tmp_FFLAGS = $(FFPSIZE) -I$(INCLUDEDIR) -subroutinef_tmp_LDADD = -L$(LIBDIR) -l$(GEN) -lstdc++ +subroutinef_tmp_LDADD = -L$(LIBDIR) -l$(GEN) -lstdc++ $(MPI_CXXLIB) subroutinef_tmp_LDFLAGS = sprngf_tmp_SOURCES = sprngf.F ../../include/sprng_f.h genf_types_menu.h sprngf_tmp_FFLAGS = $(FFPSIZE) -I$(INCLUDEDIR) -sprngf_tmp_LDADD = -L$(LIBDIR) -l$(GEN) -lstdc++ +sprngf_tmp_LDADD = -L$(LIBDIR) -l$(GEN) -lstdc++ $(MPI_CXXLIB) sprngf_tmp_LDFLAGS = sprngf_simple_tmp_SOURCES = sprngf-simple.F ../../include/sprng_f.h genf_types_menu.h sprngf_simple_tmp_FFLAGS = $(FFPSIZE) -I$(INCLUDEDIR) -sprngf_simple_tmp_LDADD = -L$(LIBDIR) -l$(GEN) -lstdc++ +sprngf_simple_tmp_LDADD = -L$(LIBDIR) -l$(GEN) -lstdc++ $(MPI_CXXLIB) sprngf_simple_tmp_LDFLAGS = diff -urN sprng5.orig/EXAMPLES/F77/Makefile.in sprng5/EXAMPLES/F77/Makefile.in --- sprng5.orig/EXAMPLES/F77/Makefile.in 2018-07-21 19:48:26.000000000 +0000 +++ sprng5/EXAMPLES/F77/Makefile.in 2021-06-08 16:52:47.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -111,49 +111,50 @@ PROGRAMS = $(bin_PROGRAMS) am_convertf_tmp_OBJECTS = convertf_tmp-convertf.$(OBJEXT) convertf_tmp_OBJECTS = $(am_convertf_tmp_OBJECTS) -convertf_tmp_DEPENDENCIES = +am__DEPENDENCIES_1 = +convertf_tmp_DEPENDENCIES = $(am__DEPENDENCIES_1) convertf_tmp_LINK = $(F77LD) $(convertf_tmp_FFLAGS) $(FFLAGS) \ $(convertf_tmp_LDFLAGS) $(LDFLAGS) -o $@ am_pif_simple_tmp_OBJECTS = pif_simple_tmp-pif-simple.$(OBJEXT) pif_simple_tmp_OBJECTS = $(am_pif_simple_tmp_OBJECTS) -pif_simple_tmp_DEPENDENCIES = +pif_simple_tmp_DEPENDENCIES = $(am__DEPENDENCIES_1) pif_simple_tmp_LINK = $(F77LD) $(pif_simple_tmp_FFLAGS) $(FFLAGS) \ $(pif_simple_tmp_LDFLAGS) $(LDFLAGS) -o $@ am_seedf_simple_tmp_OBJECTS = seedf_simple_tmp-seedf-simple.$(OBJEXT) seedf_simple_tmp_OBJECTS = $(am_seedf_simple_tmp_OBJECTS) -seedf_simple_tmp_DEPENDENCIES = +seedf_simple_tmp_DEPENDENCIES = $(am__DEPENDENCIES_1) seedf_simple_tmp_LINK = $(F77LD) $(seedf_simple_tmp_FFLAGS) $(FFLAGS) \ $(seedf_simple_tmp_LDFLAGS) $(LDFLAGS) -o $@ am_seedf_tmp_OBJECTS = seedf_tmp-seedf.$(OBJEXT) seedf_tmp_OBJECTS = $(am_seedf_tmp_OBJECTS) -seedf_tmp_DEPENDENCIES = +seedf_tmp_DEPENDENCIES = $(am__DEPENDENCIES_1) seedf_tmp_LINK = $(F77LD) $(seedf_tmp_FFLAGS) $(FFLAGS) \ $(seedf_tmp_LDFLAGS) $(LDFLAGS) -o $@ am_simplef_simple_tmp_OBJECTS = \ simplef_simple_tmp-simplef-simple.$(OBJEXT) simplef_simple_tmp_OBJECTS = $(am_simplef_simple_tmp_OBJECTS) -simplef_simple_tmp_DEPENDENCIES = +simplef_simple_tmp_DEPENDENCIES = $(am__DEPENDENCIES_1) simplef_simple_tmp_LINK = $(F77LD) $(simplef_simple_tmp_FFLAGS) \ $(FFLAGS) $(simplef_simple_tmp_LDFLAGS) $(LDFLAGS) -o $@ am_spawnf_tmp_OBJECTS = spawnf_tmp-spawnf.$(OBJEXT) spawnf_tmp_OBJECTS = $(am_spawnf_tmp_OBJECTS) -spawnf_tmp_DEPENDENCIES = +spawnf_tmp_DEPENDENCIES = $(am__DEPENDENCIES_1) spawnf_tmp_LINK = $(F77LD) $(spawnf_tmp_FFLAGS) $(FFLAGS) \ $(spawnf_tmp_LDFLAGS) $(LDFLAGS) -o $@ am_sprngf_simple_tmp_OBJECTS = \ sprngf_simple_tmp-sprngf-simple.$(OBJEXT) sprngf_simple_tmp_OBJECTS = $(am_sprngf_simple_tmp_OBJECTS) -sprngf_simple_tmp_DEPENDENCIES = +sprngf_simple_tmp_DEPENDENCIES = $(am__DEPENDENCIES_1) sprngf_simple_tmp_LINK = $(F77LD) $(sprngf_simple_tmp_FFLAGS) \ $(FFLAGS) $(sprngf_simple_tmp_LDFLAGS) $(LDFLAGS) -o $@ am_sprngf_tmp_OBJECTS = sprngf_tmp-sprngf.$(OBJEXT) sprngf_tmp_OBJECTS = $(am_sprngf_tmp_OBJECTS) -sprngf_tmp_DEPENDENCIES = +sprngf_tmp_DEPENDENCIES = $(am__DEPENDENCIES_1) sprngf_tmp_LINK = $(F77LD) $(sprngf_tmp_FFLAGS) $(FFLAGS) \ $(sprngf_tmp_LDFLAGS) $(LDFLAGS) -o $@ am_subroutinef_tmp_OBJECTS = subroutinef_tmp-subroutinef.$(OBJEXT) subroutinef_tmp_OBJECTS = $(am_subroutinef_tmp_OBJECTS) -subroutinef_tmp_DEPENDENCIES = +subroutinef_tmp_DEPENDENCIES = $(am__DEPENDENCIES_1) subroutinef_tmp_LINK = $(F77LD) $(subroutinef_tmp_FFLAGS) $(FFLAGS) \ $(subroutinef_tmp_LDFLAGS) $(LDFLAGS) -o $@ am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; @@ -306,6 +307,7 @@ MKDIR_P = @MKDIR_P@ MPICXX = @MPICXX@ MPIF77 = @MPIF77@ +MPI_CXXLIB = @MPI_CXXLIB@ MPI_DEF = @MPI_DEF@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ @@ -390,39 +392,39 @@ CLEANFILES = *.$(GEN) convertf_tmp_SOURCES = convertf.F ../../include/sprng_f.h genf_types_menu.h convertf_tmp_FFLAGS = $(FFPSIZE) -I$(INCLUDEDIR) -convertf_tmp_LDADD = -L$(LIBDIR) -l$(GEN) -lstdc++ +convertf_tmp_LDADD = -L$(LIBDIR) -l$(GEN) -lstdc++ $(MPI_CXXLIB) convertf_tmp_LDFLAGS = pif_simple_tmp_SOURCES = pif-simple.F ../../include/sprng_f.h genf_types_menu.h pif_simple_tmp_FFLAGS = $(FFPSIZE) -I$(INCLUDEDIR) -pif_simple_tmp_LDADD = -L$(LIBDIR) -l$(GEN) -lstdc++ +pif_simple_tmp_LDADD = -L$(LIBDIR) -l$(GEN) -lstdc++ $(MPI_CXXLIB) pif_simple_tmp_LDFLAGS = seedf_tmp_SOURCES = seedf.F ../../include/sprng_f.h genf_types_menu.h seedf_tmp_FFLAGS = $(FFPSIZE) -I$(INCLUDEDIR) -seedf_tmp_LDADD = -L$(LIBDIR) -l$(GEN) -lstdc++ +seedf_tmp_LDADD = -L$(LIBDIR) -l$(GEN) -lstdc++ $(MPI_CXXLIB) seedf_tmp_LDFLAGS = seedf_simple_tmp_SOURCES = seedf-simple.F ../../include/sprng_f.h genf_types_menu.h seedf_simple_tmp_FFLAGS = $(FFPSIZE) -I$(INCLUDEDIR) -seedf_simple_tmp_LDADD = -L$(LIBDIR) -l$(GEN) -lstdc++ +seedf_simple_tmp_LDADD = -L$(LIBDIR) -l$(GEN) -lstdc++ $(MPI_CXXLIB) seedf_simple_tmp_LDFLAGS = simplef_simple_tmp_SOURCES = simplef-simple.F ../../include/sprng_f.h genf_types_menu.h simplef_simple_tmp_FFLAGS = $(FFPSIZE) -I$(INCLUDEDIR) -simplef_simple_tmp_LDADD = -L$(LIBDIR) -l$(GEN) -lstdc++ +simplef_simple_tmp_LDADD = -L$(LIBDIR) -l$(GEN) -lstdc++ $(MPI_CXXLIB) simplef_simple_tmp_LDFLAGS = spawnf_tmp_SOURCES = spawnf.F ../../include/sprng_f.h genf_types_menu.h spawnf_tmp_FFLAGS = $(FFPSIZE) -I$(INCLUDEDIR) -spawnf_tmp_LDADD = -L$(LIBDIR) -l$(GEN) -lstdc++ +spawnf_tmp_LDADD = -L$(LIBDIR) -l$(GEN) -lstdc++ $(MPI_CXXLIB) spawnf_tmp_LDFLAGS = subroutinef_tmp_SOURCES = subroutinef.F ../../include/sprng_f.h genf_types_menu.h subroutinef_tmp_FFLAGS = $(FFPSIZE) -I$(INCLUDEDIR) -subroutinef_tmp_LDADD = -L$(LIBDIR) -l$(GEN) -lstdc++ +subroutinef_tmp_LDADD = -L$(LIBDIR) -l$(GEN) -lstdc++ $(MPI_CXXLIB) subroutinef_tmp_LDFLAGS = sprngf_tmp_SOURCES = sprngf.F ../../include/sprng_f.h genf_types_menu.h sprngf_tmp_FFLAGS = $(FFPSIZE) -I$(INCLUDEDIR) -sprngf_tmp_LDADD = -L$(LIBDIR) -l$(GEN) -lstdc++ +sprngf_tmp_LDADD = -L$(LIBDIR) -l$(GEN) -lstdc++ $(MPI_CXXLIB) sprngf_tmp_LDFLAGS = sprngf_simple_tmp_SOURCES = sprngf-simple.F ../../include/sprng_f.h genf_types_menu.h sprngf_simple_tmp_FFLAGS = $(FFPSIZE) -I$(INCLUDEDIR) -sprngf_simple_tmp_LDADD = -L$(LIBDIR) -l$(GEN) -lstdc++ +sprngf_simple_tmp_LDADD = -L$(LIBDIR) -l$(GEN) -lstdc++ $(MPI_CXXLIB) sprngf_simple_tmp_LDFLAGS = bin_SCRIPTS = sprngtest all: all-am diff -urN sprng5.orig/EXAMPLES/Makefile.in sprng5/EXAMPLES/Makefile.in --- sprng5.orig/EXAMPLES/Makefile.in 2018-07-21 19:48:26.000000000 +0000 +++ sprng5/EXAMPLES/Makefile.in 2021-06-08 16:40:20.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -342,6 +342,7 @@ MKDIR_P = @MKDIR_P@ MPICXX = @MPICXX@ MPIF77 = @MPIF77@ +MPI_CXXLIB = @MPI_CXXLIB@ MPI_DEF = @MPI_DEF@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ diff -urN sprng5.orig/EXAMPLES/mpisprng/Makefile.in sprng5/EXAMPLES/mpisprng/Makefile.in --- sprng5.orig/EXAMPLES/mpisprng/Makefile.in 2018-07-21 22:22:04.000000000 +0000 +++ sprng5/EXAMPLES/mpisprng/Makefile.in 2021-06-08 16:40:20.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -362,6 +362,7 @@ MKDIR_P = @MKDIR_P@ MPICXX = @MPICXX@ MPIF77 = @MPIF77@ +MPI_CXXLIB = @MPI_CXXLIB@ MPI_DEF = @MPI_DEF@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ diff -urN sprng5.orig/LICENSE sprng5/LICENSE --- sprng5.orig/LICENSE 2014-08-25 17:31:30.000000000 +0000 +++ sprng5/LICENSE 2021-05-18 00:01:37.000000000 +0000 @@ -1,435 +1,435 @@ -Attribution-NonCommercial-ShareAlike 4.0 International - -======================================================================= - -Creative Commons Corporation ("Creative Commons") is not a law firm and -does not provide legal services or legal advice. Distribution of -Creative Commons public licenses does not create a lawyer-client or -other relationship. Creative Commons makes its licenses and related -information available on an "as-is" basis. Creative Commons gives no -warranties regarding its licenses, any material licensed under their -terms and conditions, or any related information. Creative Commons -disclaims all liability for damages resulting from their use to the -fullest extent possible. - -Using Creative Commons Public Licenses - -Creative Commons public licenses provide a standard set of terms and -conditions that creators and other rights holders may use to share -original works of authorship and other material subject to copyright -and certain other rights specified in the public license below. The -following considerations are for informational purposes only, are not -exhaustive, and do not form part of our licenses. - - Considerations for licensors: Our public licenses are - intended for use by those authorized to give the public - permission to use material in ways otherwise restricted by - copyright and certain other rights. Our licenses are - irrevocable. Licensors should read and understand the terms - and conditions of the license they choose before applying it. - Licensors should also secure all rights necessary before - applying our licenses so that the public can reuse the - material as expected. Licensors should clearly mark any - material not subject to the license. This includes other CC- - licensed material, or material used under an exception or - limitation to copyright. More considerations for licensors: - wiki.creativecommons.org/Considerations_for_licensors - - Considerations for the public: By using one of our public - licenses, a licensor grants the public permission to use the - licensed material under specified terms and conditions. If - the licensor's permission is not necessary for any reason--for - example, because of any applicable exception or limitation to - copyright--then that use is not regulated by the license. Our - licenses grant only permissions under copyright and certain - other rights that a licensor has authority to grant. Use of - the licensed material may still be restricted for other - reasons, including because others have copyright or other - rights in the material. A licensor may make special requests, - such as asking that all changes be marked or described. - Although not required by our licenses, you are encouraged to - respect those requests where reasonable. More_considerations - for the public: - wiki.creativecommons.org/Considerations_for_licensees - -======================================================================= - -Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International -Public License - -By exercising the Licensed Rights (defined below), You accept and agree -to be bound by the terms and conditions of this Creative Commons -Attribution-NonCommercial-ShareAlike 4.0 International Public License -("Public License"). To the extent this Public License may be -interpreted as a contract, You are granted the Licensed Rights in -consideration of Your acceptance of these terms and conditions, and the -Licensor grants You such rights in consideration of benefits the -Licensor receives from making the Licensed Material available under -these terms and conditions. - - -Section 1 -- Definitions. - - a. Adapted Material means material subject to Copyright and Similar - Rights that is derived from or based upon the Licensed Material - and in which the Licensed Material is translated, altered, - arranged, transformed, or otherwise modified in a manner requiring - permission under the Copyright and Similar Rights held by the - Licensor. For purposes of this Public License, where the Licensed - Material is a musical work, performance, or sound recording, - Adapted Material is always produced where the Licensed Material is - synched in timed relation with a moving image. - - b. Adapter's License means the license You apply to Your Copyright - and Similar Rights in Your contributions to Adapted Material in - accordance with the terms and conditions of this Public License. - - c. BY-NC-SA Compatible License means a license listed at - creativecommons.org/compatiblelicenses, approved by Creative - Commons as essentially the equivalent of this Public License. - - d. Copyright and Similar Rights means copyright and/or similar rights - closely related to copyright including, without limitation, - performance, broadcast, sound recording, and Sui Generis Database - Rights, without regard to how the rights are labeled or - categorized. For purposes of this Public License, the rights - specified in Section 2(b)(1)-(2) are not Copyright and Similar - Rights. - - e. Effective Technological Measures means those measures that, in the - absence of proper authority, may not be circumvented under laws - fulfilling obligations under Article 11 of the WIPO Copyright - Treaty adopted on December 20, 1996, and/or similar international - agreements. - - f. Exceptions and Limitations means fair use, fair dealing, and/or - any other exception or limitation to Copyright and Similar Rights - that applies to Your use of the Licensed Material. - - g. License Elements means the license attributes listed in the name - of a Creative Commons Public License. The License Elements of this - Public License are Attribution, NonCommercial, and ShareAlike. - - h. Licensed Material means the artistic or literary work, database, - or other material to which the Licensor applied this Public - License. - - i. Licensed Rights means the rights granted to You subject to the - terms and conditions of this Public License, which are limited to - all Copyright and Similar Rights that apply to Your use of the - Licensed Material and that the Licensor has authority to license. - - j. Licensor means the individual(s) or entity(ies) granting rights - under this Public License. - - k. NonCommercial means not primarily intended for or directed towards - commercial advantage or monetary compensation. For purposes of - this Public License, the exchange of the Licensed Material for - other material subject to Copyright and Similar Rights by digital - file-sharing or similar means is NonCommercial provided there is - no payment of monetary compensation in connection with the - exchange. - - l. Share means to provide material to the public by any means or - process that requires permission under the Licensed Rights, such - as reproduction, public display, public performance, distribution, - dissemination, communication, or importation, and to make material - available to the public including in ways that members of the - public may access the material from a place and at a time - individually chosen by them. - - m. Sui Generis Database Rights means rights other than copyright - resulting from Directive 96/9/EC of the European Parliament and of - the Council of 11 March 1996 on the legal protection of databases, - as amended and/or succeeded, as well as other essentially - equivalent rights anywhere in the world. - - n. You means the individual or entity exercising the Licensed Rights - under this Public License. Your has a corresponding meaning. - - -Section 2 -- Scope. - - a. License grant. - - 1. Subject to the terms and conditions of this Public License, - the Licensor hereby grants You a worldwide, royalty-free, - non-sublicensable, non-exclusive, irrevocable license to - exercise the Licensed Rights in the Licensed Material to: - - a. reproduce and Share the Licensed Material, in whole or - in part, for NonCommercial purposes only; and - - b. produce, reproduce, and Share Adapted Material for - NonCommercial purposes only. - - 2. Exceptions and Limitations. For the avoidance of doubt, where - Exceptions and Limitations apply to Your use, this Public - License does not apply, and You do not need to comply with - its terms and conditions. - - 3. Term. The term of this Public License is specified in Section - 6(a). - - 4. Media and formats; technical modifications allowed. The - Licensor authorizes You to exercise the Licensed Rights in - all media and formats whether now known or hereafter created, - and to make technical modifications necessary to do so. The - Licensor waives and/or agrees not to assert any right or - authority to forbid You from making technical modifications - necessary to exercise the Licensed Rights, including - technical modifications necessary to circumvent Effective - Technological Measures. For purposes of this Public License, - simply making modifications authorized by this Section 2(a) - (4) never produces Adapted Material. - - 5. Downstream recipients. - - a. Offer from the Licensor -- Licensed Material. Every - recipient of the Licensed Material automatically - receives an offer from the Licensor to exercise the - Licensed Rights under the terms and conditions of this - Public License. - - b. Additional offer from the Licensor -- Adapted Material. - Every recipient of Adapted Material from You - automatically receives an offer from the Licensor to - exercise the Licensed Rights in the Adapted Material - under the conditions of the Adapter's License You apply. - - c. No downstream restrictions. You may not offer or impose - any additional or different terms or conditions on, or - apply any Effective Technological Measures to, the - Licensed Material if doing so restricts exercise of the - Licensed Rights by any recipient of the Licensed - Material. - - 6. No endorsement. Nothing in this Public License constitutes or - may be construed as permission to assert or imply that You - are, or that Your use of the Licensed Material is, connected - with, or sponsored, endorsed, or granted official status by, - the Licensor or others designated to receive attribution as - provided in Section 3(a)(1)(A)(i). - - b. Other rights. - - 1. Moral rights, such as the right of integrity, are not - licensed under this Public License, nor are publicity, - privacy, and/or other similar personality rights; however, to - the extent possible, the Licensor waives and/or agrees not to - assert any such rights held by the Licensor to the limited - extent necessary to allow You to exercise the Licensed - Rights, but not otherwise. - - 2. Patent and trademark rights are not licensed under this - Public License. - - 3. To the extent possible, the Licensor waives any right to - collect royalties from You for the exercise of the Licensed - Rights, whether directly or through a collecting society - under any voluntary or waivable statutory or compulsory - licensing scheme. In all other cases the Licensor expressly - reserves any right to collect such royalties, including when - the Licensed Material is used other than for NonCommercial - purposes. - - -Section 3 -- License Conditions. - -Your exercise of the Licensed Rights is expressly made subject to the -following conditions. - - a. Attribution. - - 1. If You Share the Licensed Material (including in modified - form), You must: - - a. retain the following if it is supplied by the Licensor - with the Licensed Material: - - i. identification of the creator(s) of the Licensed - Material and any others designated to receive - attribution, in any reasonable manner requested by - the Licensor (including by pseudonym if - designated); - - ii. a copyright notice; - - iii. a notice that refers to this Public License; - - iv. a notice that refers to the disclaimer of - warranties; - - v. a URI or hyperlink to the Licensed Material to the - extent reasonably practicable; - - b. indicate if You modified the Licensed Material and - retain an indication of any previous modifications; and - - c. indicate the Licensed Material is licensed under this - Public License, and include the text of, or the URI or - hyperlink to, this Public License. - - 2. You may satisfy the conditions in Section 3(a)(1) in any - reasonable manner based on the medium, means, and context in - which You Share the Licensed Material. For example, it may be - reasonable to satisfy the conditions by providing a URI or - hyperlink to a resource that includes the required - information. - 3. If requested by the Licensor, You must remove any of the - information required by Section 3(a)(1)(A) to the extent - reasonably practicable. - - b. ShareAlike. - - In addition to the conditions in Section 3(a), if You Share - Adapted Material You produce, the following conditions also apply. - - 1. The Adapter's License You apply must be a Creative Commons - license with the same License Elements, this version or - later, or a BY-NC-SA Compatible License. - - 2. You must include the text of, or the URI or hyperlink to, the - Adapter's License You apply. You may satisfy this condition - in any reasonable manner based on the medium, means, and - context in which You Share Adapted Material. - - 3. You may not offer or impose any additional or different terms - or conditions on, or apply any Effective Technological - Measures to, Adapted Material that restrict exercise of the - rights granted under the Adapter's License You apply. - - -Section 4 -- Sui Generis Database Rights. - -Where the Licensed Rights include Sui Generis Database Rights that -apply to Your use of the Licensed Material: - - a. for the avoidance of doubt, Section 2(a)(1) grants You the right - to extract, reuse, reproduce, and Share all or a substantial - portion of the contents of the database for NonCommercial purposes - only; - - b. if You include all or a substantial portion of the database - contents in a database in which You have Sui Generis Database - Rights, then the database in which You have Sui Generis Database - Rights (but not its individual contents) is Adapted Material, - including for purposes of Section 3(b); and - - c. You must comply with the conditions in Section 3(a) if You Share - all or a substantial portion of the contents of the database. - -For the avoidance of doubt, this Section 4 supplements and does not -replace Your obligations under this Public License where the Licensed -Rights include other Copyright and Similar Rights. - - -Section 5 -- Disclaimer of Warranties and Limitation of Liability. - - a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE - EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS - AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF - ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, - IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, - WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR - PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, - ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT - KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT - ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. - - b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE - TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, - NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, - INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, - COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR - USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN - ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR - DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR - IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. - - c. The disclaimer of warranties and limitation of liability provided - above shall be interpreted in a manner that, to the extent - possible, most closely approximates an absolute disclaimer and - waiver of all liability. - - -Section 6 -- Term and Termination. - - a. This Public License applies for the term of the Copyright and - Similar Rights licensed here. However, if You fail to comply with - this Public License, then Your rights under this Public License - terminate automatically. - - b. Where Your right to use the Licensed Material has terminated under - Section 6(a), it reinstates: - - 1. automatically as of the date the violation is cured, provided - it is cured within 30 days of Your discovery of the - violation; or - - 2. upon express reinstatement by the Licensor. - - For the avoidance of doubt, this Section 6(b) does not affect any - right the Licensor may have to seek remedies for Your violations - of this Public License. - - c. For the avoidance of doubt, the Licensor may also offer the - Licensed Material under separate terms or conditions or stop - distributing the Licensed Material at any time; however, doing so - will not terminate this Public License. - - d. Sections 1, 5, 6, 7, and 8 survive termination of this Public - License. - - -Section 7 -- Other Terms and Conditions. - - a. The Licensor shall not be bound by any additional or different - terms or conditions communicated by You unless expressly agreed. - - b. Any arrangements, understandings, or agreements regarding the - Licensed Material not stated herein are separate from and - independent of the terms and conditions of this Public License. - - -Section 8 -- Interpretation. - - a. For the avoidance of doubt, this Public License does not, and - shall not be interpreted to, reduce, limit, restrict, or impose - conditions on any use of the Licensed Material that could lawfully - be made without permission under this Public License. - - b. To the extent possible, if any provision of this Public License is - deemed unenforceable, it shall be automatically reformed to the - minimum extent necessary to make it enforceable. If the provision - cannot be reformed, it shall be severed from this Public License - without affecting the enforceability of the remaining terms and - conditions. - - c. No term or condition of this Public License will be waived and no - failure to comply consented to unless expressly agreed to by the - Licensor. - - d. Nothing in this Public License constitutes or may be interpreted - as a limitation upon, or waiver of, any privileges and immunities - that apply to the Licensor or You, including from the legal - processes of any jurisdiction or authority. - -======================================================================= - -Creative Commons is not a party to its public licenses. -Notwithstanding, Creative Commons may elect to apply one of its public -licenses to material it publishes and in those instances will be -considered the "Licensor." Except for the limited purpose of indicating -that material is shared under a Creative Commons public license or as -otherwise permitted by the Creative Commons policies published at -creativecommons.org/policies, Creative Commons does not authorize the -use of the trademark "Creative Commons" or any other trademark or logo -of Creative Commons without its prior written consent including, -without limitation, in connection with any unauthorized modifications -to any of its public licenses or any other arrangements, -understandings, or agreements concerning use of licensed material. For -the avoidance of doubt, this paragraph does not form part of the public -licenses. - +Attribution-NonCommercial-ShareAlike 4.0 International + +======================================================================= + +Creative Commons Corporation ("Creative Commons") is not a law firm and +does not provide legal services or legal advice. Distribution of +Creative Commons public licenses does not create a lawyer-client or +other relationship. Creative Commons makes its licenses and related +information available on an "as-is" basis. Creative Commons gives no +warranties regarding its licenses, any material licensed under their +terms and conditions, or any related information. Creative Commons +disclaims all liability for damages resulting from their use to the +fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and +conditions that creators and other rights holders may use to share +original works of authorship and other material subject to copyright +and certain other rights specified in the public license below. The +following considerations are for informational purposes only, are not +exhaustive, and do not form part of our licenses. + + Considerations for licensors: Our public licenses are + intended for use by those authorized to give the public + permission to use material in ways otherwise restricted by + copyright and certain other rights. Our licenses are + irrevocable. Licensors should read and understand the terms + and conditions of the license they choose before applying it. + Licensors should also secure all rights necessary before + applying our licenses so that the public can reuse the + material as expected. Licensors should clearly mark any + material not subject to the license. This includes other CC- + licensed material, or material used under an exception or + limitation to copyright. More considerations for licensors: + wiki.creativecommons.org/Considerations_for_licensors + + Considerations for the public: By using one of our public + licenses, a licensor grants the public permission to use the + licensed material under specified terms and conditions. If + the licensor's permission is not necessary for any reason--for + example, because of any applicable exception or limitation to + copyright--then that use is not regulated by the license. Our + licenses grant only permissions under copyright and certain + other rights that a licensor has authority to grant. Use of + the licensed material may still be restricted for other + reasons, including because others have copyright or other + rights in the material. A licensor may make special requests, + such as asking that all changes be marked or described. + Although not required by our licenses, you are encouraged to + respect those requests where reasonable. More_considerations + for the public: + wiki.creativecommons.org/Considerations_for_licensees + +======================================================================= + +Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International +Public License + +By exercising the Licensed Rights (defined below), You accept and agree +to be bound by the terms and conditions of this Creative Commons +Attribution-NonCommercial-ShareAlike 4.0 International Public License +("Public License"). To the extent this Public License may be +interpreted as a contract, You are granted the Licensed Rights in +consideration of Your acceptance of these terms and conditions, and the +Licensor grants You such rights in consideration of benefits the +Licensor receives from making the Licensed Material available under +these terms and conditions. + + +Section 1 -- Definitions. + + a. Adapted Material means material subject to Copyright and Similar + Rights that is derived from or based upon the Licensed Material + and in which the Licensed Material is translated, altered, + arranged, transformed, or otherwise modified in a manner requiring + permission under the Copyright and Similar Rights held by the + Licensor. For purposes of this Public License, where the Licensed + Material is a musical work, performance, or sound recording, + Adapted Material is always produced where the Licensed Material is + synched in timed relation with a moving image. + + b. Adapter's License means the license You apply to Your Copyright + and Similar Rights in Your contributions to Adapted Material in + accordance with the terms and conditions of this Public License. + + c. BY-NC-SA Compatible License means a license listed at + creativecommons.org/compatiblelicenses, approved by Creative + Commons as essentially the equivalent of this Public License. + + d. Copyright and Similar Rights means copyright and/or similar rights + closely related to copyright including, without limitation, + performance, broadcast, sound recording, and Sui Generis Database + Rights, without regard to how the rights are labeled or + categorized. For purposes of this Public License, the rights + specified in Section 2(b)(1)-(2) are not Copyright and Similar + Rights. + + e. Effective Technological Measures means those measures that, in the + absence of proper authority, may not be circumvented under laws + fulfilling obligations under Article 11 of the WIPO Copyright + Treaty adopted on December 20, 1996, and/or similar international + agreements. + + f. Exceptions and Limitations means fair use, fair dealing, and/or + any other exception or limitation to Copyright and Similar Rights + that applies to Your use of the Licensed Material. + + g. License Elements means the license attributes listed in the name + of a Creative Commons Public License. The License Elements of this + Public License are Attribution, NonCommercial, and ShareAlike. + + h. Licensed Material means the artistic or literary work, database, + or other material to which the Licensor applied this Public + License. + + i. Licensed Rights means the rights granted to You subject to the + terms and conditions of this Public License, which are limited to + all Copyright and Similar Rights that apply to Your use of the + Licensed Material and that the Licensor has authority to license. + + j. Licensor means the individual(s) or entity(ies) granting rights + under this Public License. + + k. NonCommercial means not primarily intended for or directed towards + commercial advantage or monetary compensation. For purposes of + this Public License, the exchange of the Licensed Material for + other material subject to Copyright and Similar Rights by digital + file-sharing or similar means is NonCommercial provided there is + no payment of monetary compensation in connection with the + exchange. + + l. Share means to provide material to the public by any means or + process that requires permission under the Licensed Rights, such + as reproduction, public display, public performance, distribution, + dissemination, communication, or importation, and to make material + available to the public including in ways that members of the + public may access the material from a place and at a time + individually chosen by them. + + m. Sui Generis Database Rights means rights other than copyright + resulting from Directive 96/9/EC of the European Parliament and of + the Council of 11 March 1996 on the legal protection of databases, + as amended and/or succeeded, as well as other essentially + equivalent rights anywhere in the world. + + n. You means the individual or entity exercising the Licensed Rights + under this Public License. Your has a corresponding meaning. + + +Section 2 -- Scope. + + a. License grant. + + 1. Subject to the terms and conditions of this Public License, + the Licensor hereby grants You a worldwide, royalty-free, + non-sublicensable, non-exclusive, irrevocable license to + exercise the Licensed Rights in the Licensed Material to: + + a. reproduce and Share the Licensed Material, in whole or + in part, for NonCommercial purposes only; and + + b. produce, reproduce, and Share Adapted Material for + NonCommercial purposes only. + + 2. Exceptions and Limitations. For the avoidance of doubt, where + Exceptions and Limitations apply to Your use, this Public + License does not apply, and You do not need to comply with + its terms and conditions. + + 3. Term. The term of this Public License is specified in Section + 6(a). + + 4. Media and formats; technical modifications allowed. The + Licensor authorizes You to exercise the Licensed Rights in + all media and formats whether now known or hereafter created, + and to make technical modifications necessary to do so. The + Licensor waives and/or agrees not to assert any right or + authority to forbid You from making technical modifications + necessary to exercise the Licensed Rights, including + technical modifications necessary to circumvent Effective + Technological Measures. For purposes of this Public License, + simply making modifications authorized by this Section 2(a) + (4) never produces Adapted Material. + + 5. Downstream recipients. + + a. Offer from the Licensor -- Licensed Material. Every + recipient of the Licensed Material automatically + receives an offer from the Licensor to exercise the + Licensed Rights under the terms and conditions of this + Public License. + + b. Additional offer from the Licensor -- Adapted Material. + Every recipient of Adapted Material from You + automatically receives an offer from the Licensor to + exercise the Licensed Rights in the Adapted Material + under the conditions of the Adapter's License You apply. + + c. No downstream restrictions. You may not offer or impose + any additional or different terms or conditions on, or + apply any Effective Technological Measures to, the + Licensed Material if doing so restricts exercise of the + Licensed Rights by any recipient of the Licensed + Material. + + 6. No endorsement. Nothing in this Public License constitutes or + may be construed as permission to assert or imply that You + are, or that Your use of the Licensed Material is, connected + with, or sponsored, endorsed, or granted official status by, + the Licensor or others designated to receive attribution as + provided in Section 3(a)(1)(A)(i). + + b. Other rights. + + 1. Moral rights, such as the right of integrity, are not + licensed under this Public License, nor are publicity, + privacy, and/or other similar personality rights; however, to + the extent possible, the Licensor waives and/or agrees not to + assert any such rights held by the Licensor to the limited + extent necessary to allow You to exercise the Licensed + Rights, but not otherwise. + + 2. Patent and trademark rights are not licensed under this + Public License. + + 3. To the extent possible, the Licensor waives any right to + collect royalties from You for the exercise of the Licensed + Rights, whether directly or through a collecting society + under any voluntary or waivable statutory or compulsory + licensing scheme. In all other cases the Licensor expressly + reserves any right to collect such royalties, including when + the Licensed Material is used other than for NonCommercial + purposes. + + +Section 3 -- License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the +following conditions. + + a. Attribution. + + 1. If You Share the Licensed Material (including in modified + form), You must: + + a. retain the following if it is supplied by the Licensor + with the Licensed Material: + + i. identification of the creator(s) of the Licensed + Material and any others designated to receive + attribution, in any reasonable manner requested by + the Licensor (including by pseudonym if + designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of + warranties; + + v. a URI or hyperlink to the Licensed Material to the + extent reasonably practicable; + + b. indicate if You modified the Licensed Material and + retain an indication of any previous modifications; and + + c. indicate the Licensed Material is licensed under this + Public License, and include the text of, or the URI or + hyperlink to, this Public License. + + 2. You may satisfy the conditions in Section 3(a)(1) in any + reasonable manner based on the medium, means, and context in + which You Share the Licensed Material. For example, it may be + reasonable to satisfy the conditions by providing a URI or + hyperlink to a resource that includes the required + information. + 3. If requested by the Licensor, You must remove any of the + information required by Section 3(a)(1)(A) to the extent + reasonably practicable. + + b. ShareAlike. + + In addition to the conditions in Section 3(a), if You Share + Adapted Material You produce, the following conditions also apply. + + 1. The Adapter's License You apply must be a Creative Commons + license with the same License Elements, this version or + later, or a BY-NC-SA Compatible License. + + 2. You must include the text of, or the URI or hyperlink to, the + Adapter's License You apply. You may satisfy this condition + in any reasonable manner based on the medium, means, and + context in which You Share Adapted Material. + + 3. You may not offer or impose any additional or different terms + or conditions on, or apply any Effective Technological + Measures to, Adapted Material that restrict exercise of the + rights granted under the Adapter's License You apply. + + +Section 4 -- Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that +apply to Your use of the Licensed Material: + + a. for the avoidance of doubt, Section 2(a)(1) grants You the right + to extract, reuse, reproduce, and Share all or a substantial + portion of the contents of the database for NonCommercial purposes + only; + + b. if You include all or a substantial portion of the database + contents in a database in which You have Sui Generis Database + Rights, then the database in which You have Sui Generis Database + Rights (but not its individual contents) is Adapted Material, + including for purposes of Section 3(b); and + + c. You must comply with the conditions in Section 3(a) if You Share + all or a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not +replace Your obligations under this Public License where the Licensed +Rights include other Copyright and Similar Rights. + + +Section 5 -- Disclaimer of Warranties and Limitation of Liability. + + a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE + EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS + AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF + ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, + IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, + WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR + PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, + ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT + KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT + ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. + + b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE + TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, + NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, + INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, + COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR + USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN + ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR + DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR + IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. + + c. The disclaimer of warranties and limitation of liability provided + above shall be interpreted in a manner that, to the extent + possible, most closely approximates an absolute disclaimer and + waiver of all liability. + + +Section 6 -- Term and Termination. + + a. This Public License applies for the term of the Copyright and + Similar Rights licensed here. However, if You fail to comply with + this Public License, then Your rights under this Public License + terminate automatically. + + b. Where Your right to use the Licensed Material has terminated under + Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided + it is cured within 30 days of Your discovery of the + violation; or + + 2. upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect any + right the Licensor may have to seek remedies for Your violations + of this Public License. + + c. For the avoidance of doubt, the Licensor may also offer the + Licensed Material under separate terms or conditions or stop + distributing the Licensed Material at any time; however, doing so + will not terminate this Public License. + + d. Sections 1, 5, 6, 7, and 8 survive termination of this Public + License. + + +Section 7 -- Other Terms and Conditions. + + a. The Licensor shall not be bound by any additional or different + terms or conditions communicated by You unless expressly agreed. + + b. Any arrangements, understandings, or agreements regarding the + Licensed Material not stated herein are separate from and + independent of the terms and conditions of this Public License. + + +Section 8 -- Interpretation. + + a. For the avoidance of doubt, this Public License does not, and + shall not be interpreted to, reduce, limit, restrict, or impose + conditions on any use of the Licensed Material that could lawfully + be made without permission under this Public License. + + b. To the extent possible, if any provision of this Public License is + deemed unenforceable, it shall be automatically reformed to the + minimum extent necessary to make it enforceable. If the provision + cannot be reformed, it shall be severed from this Public License + without affecting the enforceability of the remaining terms and + conditions. + + c. No term or condition of this Public License will be waived and no + failure to comply consented to unless expressly agreed to by the + Licensor. + + d. Nothing in this Public License constitutes or may be interpreted + as a limitation upon, or waiver of, any privileges and immunities + that apply to the Licensor or You, including from the legal + processes of any jurisdiction or authority. + +======================================================================= + +Creative Commons is not a party to its public licenses. +Notwithstanding, Creative Commons may elect to apply one of its public +licenses to material it publishes and in those instances will be +considered the "Licensor." Except for the limited purpose of indicating +that material is shared under a Creative Commons public license or as +otherwise permitted by the Creative Commons policies published at +creativecommons.org/policies, Creative Commons does not authorize the +use of the trademark "Creative Commons" or any other trademark or logo +of Creative Commons without its prior written consent including, +without limitation, in connection with any unauthorized modifications +to any of its public licenses or any other arrangements, +understandings, or agreements concerning use of licensed material. For +the avoidance of doubt, this paragraph does not form part of the public +licenses. + Creative Commons may be contacted at creativecommons.org. \ No newline at end of file diff -urN sprng5.orig/Makefile.in sprng5/Makefile.in --- sprng5.orig/Makefile.in 2018-07-21 19:48:26.000000000 +0000 +++ sprng5/Makefile.in 2021-06-08 16:40:20.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -249,6 +249,7 @@ MKDIR_P = @MKDIR_P@ MPICXX = @MPICXX@ MPIF77 = @MPIF77@ +MPI_CXXLIB = @MPI_CXXLIB@ MPI_DEF = @MPI_DEF@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ @@ -551,7 +552,7 @@ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir - tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir @@ -577,7 +578,7 @@ @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 - shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir @@ -595,7 +596,7 @@ distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ + eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ @@ -605,7 +606,7 @@ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ + eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac diff -urN sprng5.orig/SRC/.template.cpp sprng5/SRC/.template.cpp --- sprng5.orig/SRC/.template.cpp 2014-08-25 17:56:49.000000000 +0000 +++ sprng5/SRC/.template.cpp 2021-05-12 12:32:20.000000000 +0000 @@ -3,14 +3,14 @@ /* A PARALLEL RANDOM NUMBER GENERATION SYSTEM IN SPRNG FORMAT */ /* */ /* Check for more changes needed to add a new rng in DOCS */ -/* */ +/* */ /* Modifed by J.Ren */ /* Florida State University */ /* Email: ren@csit.fsu.edu */ /* Based on implentation by */ /* Ashok Srinivasan (Apr 13, 1998) */ -/* */ /* */ +/* */ /* Note: Data stored by 'pack_rng' is NOT in a machine independent */ /* format. For that, please take a look at some SPRNG examples */ /* (lcg/lcg.cpp, lfg/lfg.cpp, etc). */ @@ -27,21 +27,18 @@ using namespace std; - /*** Change this to the type of generator you are implementing ***/ #define GENTYPE "Sample Generator" - #define MAX_STREAMS MyRng_MAX_STREAMS #define NGENS MyRng_NGENS #define NPARAMS 1 /*** number of valid parameters ***/ -int MAX_STREAMS = (1<<19); /*** Maximum number of independent streams ***/ +int MAX_STREAMS = (1 << 19); /*** Maximum number of independent streams ***/ -int NGENS=0; /* number of random streams in current process */ +int NGENS = 0; /* number of random streams in current process */ - -MyRng::MyRng() /* default constructor */ +MyRng::MyRng () /* default constructor */ { /* modify if necessary */ gentype = NULL; @@ -58,58 +55,57 @@ double x = 0.0; /* please remove this in your implementation */ } - /* Initialize random number stream */ -int MyRng::init_rng(int gn, int tg, int s, int p) +int MyRng::init_rng (int gn, int tg, int s, int p) { -/* gives back one stream (node gennum) with updated spawning */ -/* info; should be called total_gen times, with different value */ -/* of gennum in [0,total_gen) each call */ + /* gives back one stream (node gennum) with updated spawning */ + /* info; should be called total_gen times, with different value */ + /* of gennum in [0,total_gen) each call */ int i; - + if (tg <= 0) /* Is total_gen valid ? */ { tg = 1; - fprintf(stderr,"WARNING - init_rng: Total_gen <= 0. Default value of 1 used for total_gen\n"); + fprintf (stderr,"WARNING - init_rng: Total_gen <= 0. Default value of 1 used for total_gen\n"); } if (gn >= MAX_STREAMS) /* check if gen_num is valid */ - fprintf(stderr,"WARNING - init_rng: gennum: %d > maximum number of independent streams: %d\n\tIndependence of streams cannot be guranteed.\n", - gn, MAX_STREAMS); + fprintf (stderr,"WARNING - init_rng: gennum: %d > maximum number of independent streams: %d\n\tIndependence of streams cannot be guranteed.\n", + gn, MAX_STREAMS); if (gn < 0 || gn >= tg) /* check if gen_num is valid */ { - fprintf(stderr,"ERROR - init_rng: gennum %d out of range [%d,%d).\n", - gn, 0, tg); + fprintf (stderr, "ERROR - init_rng: gennum %d out of range [%d,%d).\n",gn, 0, tg); return 0; } - if (p < 0 || p >= NPARAMS) /* check if parameter is valid */ + if (p < 0 || p >= NPARAMS) /* check if parameter is valid */ { - fprintf(stderr,"WARNING - init_rng: parameter not valid. Using Default parameter.\n"); + fprintf (stderr,"WARNING - init_rng: parameter not valid. Using Default parameter.\n"); p = 0; } - - /* check if memory allocated for data structure */ - if ((MyRng *) mymalloc(1*sizeof(MyRng) == NULL) { - cerr << "Memory allocation error: init_rng\n"; - return 0; - } - - /* Initiallize data structure variables */ - gentype = GENTYPE; - stream_number = gn; - nstreams = tg; - init_seed = s & 0x7fffffff; /* Only 31 LSB of seed considered */ - parameter = p; - spawn_offset = tg; - - /*** Change the next line depending on your generators data needs ***/ - narrays = 0; /* number of arrays needed by your generator */ - if(narrays > 0) + /* check if memory allocated for data structure */ + if ((MyRng *) mymalloc(1*sizeof(MyRng) == NULL) + { + cerr << "Memory allocation error: init_rng\n"; + return 0; + } + + /* Initiallize data structure variables */ + gentype = GENTYPE; + stream_number = gn; + nstreams = tg; + init_seed = s & 0x7fffffff; /* Only 31 LSB of seed considered */ + parameter = p; + spawn_offset = tg; + + /*** Change the next line depending on your generators data needs ***/ + narrays = 0; /* number of arrays needed by your generator */ + + if(narrays > 0) { array_sizes = new int[narrays]; arrays = new int * [narrays]; @@ -117,40 +113,39 @@ if(array_sizes == NULL || arrays == NULL) return 0; } - else + else { array_sizes = NULL; arrays = NULL; } - - /*** Change the next line depending on your generators data needs ***/ - /* initiallize ...array_sizes to the sizes of the arrays */ + /*** Change the next line depending on your generators data needs ***/ + /* initiallize ...array_sizes to the sizes of the arrays */ - for(i=0; i0.85) /* the statements below are here just for */ - x = 0.0; /* testing purposes. Please _do_ remove */ - else /* them in your implementation. */ - x += 0.1; - - return x; -} + if(x>0.85) /* the statements below are here just for */ + x = 0.0; /* testing purposes. Please _do_ remove */ + else /* them in your implementation. */ + x += 0.1; + return x; +} - /* Return a random integer */ -int MyRng::get_rn_int() +int MyRng::get_rn_int () { /* If you have a more efficient way of computing the random integer in - [0,2^31), then please replace the statement below with your scheme. */ + [0,2^31), then please replace the statement below with your scheme. */ - return (int) (get_rn_dbl()*0x80000000); -} + return (int) (get_rn_dbl () * 0x80000000); +} - - /* Return a single precision random number */ - -float MyRng::get_rn_flt() +float MyRng::get_rn_flt () { /* If you have a more efficient way of computing the random integer, - then please replace the statement below with your scheme. */ + then please replace the statement below with your scheme. */ - return (float) get_rn_dbl(); + return (float) get_rn_dbl (); } - /*************************************************************************/ /*************************************************************************/ /* SPAWN_RNG: spawns new generators */ /*************************************************************************/ /*************************************************************************/ -int MyRng::spawn_rng(int nspawned, Sprng ***newgens, int checkid) +int MyRng::spawn_rng (int nspawned, Sprng ***newgens, int checkid) { - MyRng ** genptr; + MyRng **genptr; int i, j; - + if (nspawned <= 0) /* is nspawned valid ? */ { - nspawned = 1; - fprintf(stderr,"WARNING - spawn_rng: nspawned <= 0. Default value of 1 used for nspawned\n"); + nspawned = 1; + fprintf (stderr,"WARNING - spawn_rng: nspawned <= 0. Default value of 1 used for nspawned\n"); } - genptr = (MyRng **) mymalloc(nspawned *sizeof(MyRng *)); - - if(genptr == NULL) /* allocate memory for pointers to structures */ + genptr = (MyRng**) mymalloc(nspawned * sizeof(MyRng*)); + + if (genptr == NULL) /* allocate memory for pointers to structures */ { *newgens = NULL; return 0; } - - for(i=0; i MAX_STREAMS) /* change seed to avoid repeating sequence */ - seed = (init_seed)^gennum; - else + + gennum = stream_number + spawn_offset * (i + 1); + + if (gennum > MAX_STREAMS) /* change seed to avoid repeating sequence */ + seed = (init_seed) ^ gennum; + else seed = init_seed; - + /* Initialize a stream. This stream has incorrect spawning information. - But we will correct it below. */ + But we will correct it below. */ genptr[i] = new MyRng; - genptr[i]->init_rng(gennum, gennum+1, seed, parameter); - - if(genptr[i] == NULL) /* Was generator initiallized? */ + genptr[i]->init_rng (gennum, gennum + 1, seed, parameter); + + if (genptr[i] == NULL) /* Was generator initiallized? */ { nspawned = i; break; } - - genptr[i]->spawn_offset = (nspawned+1)*spawn_offset; + + genptr[i]->spawn_offset = (nspawned + 1) * spawn_offset; } - - tempptr->spawn_offset *= (nspawned+1); - *newgens = (Sprng **) genptr; - - if(checkid != 0) - for(i=0; ispawn_offset *= (nspawned + 1); + *newgens = (Sprng**) genptr; + + if (checkid != 0) + for (i = 0; i < nspawned; i++) + if (addID ((int*) genptr[i]) == NULL) + return i; + return nspawned; } - /* Free memory allocated for data structure associated with stream */ -int MyRng::free_rng() +int MyRng::free_rng () { int i; - - assert(this != NULL); - - for(i=0; i 0) + assert (this != NULL); + + for (i = 0; i < narrays; i++) + delete[] array[i]; + + if (narrays > 0) { - delete [] array_sizes]; - delete [] arrays; + delete[] array_sizes; + delete[] arrays; } NGENS--; return NGENS; } - -int MyRng::pack_rng(char **buffer) +int MyRng::pack_rng (char **buffer) { unsigned char *p, *initp; unsigned int size, i; - + /* Replace these with the proper values for the number of each type of variable */ - size = 4*4 /*sizeof(int)*/ + 0*8/*sizeof(unsigned LONG64)*/ + narrays * 4 /*array_sizes*/; + size = 4 * 4 /*sizeof(int)*/+ 0 * 8/*sizeof(unsigned LONG64)*/ + + narrays * 4 /*array_sizes*/; /* The new load/store routines make using sizeof unnecessary. Infact, */ /* using sizeof could be erroneous. */ /* Add the size of each array */ - for (i = 0; i < narrays; ++i) + for (i = 0; i < narrays; ++i) { size += array_sizes[i] * 4; - } - - initp = p = (unsigned char *) mymalloc(size); + } - if(p == NULL) + initp = p = (unsigned char*) mymalloc(size); + + if (p == NULL) { *buffer = NULL; return 0; } - p += store_int(rng_type,4,p); - p += store_int(init_seed,4,p); - p += store_int(parameter,4,p); - - p += store_int(narrays,4,p); - - p + store_intarray(array_sizes,narrays,4,p); - + p += store_int (rng_type, 4, p); + p += store_int (init_seed, 4, p); + p += store_int (parameter, 4, p); + + p += store_int (narrays, 4, p); + + p + store_intarray (array_sizes, narrays, 4, p); + for (i = 0; i < narrays; ++i) { - p += store_intarray(arrays[i], array_sizes[i], 4, p); + p += store_intarray (arrays[i], array_sizes[i], 4, p); } - + /* Store other variables */ - - *buffer = (char *) initp; - assert(p-initp == size); - - return p-initp; + *buffer = (char*) initp; -} + assert (p - initp == size); + return p - initp; -int MyRng::unpack_rng( char *packed) +} + +int MyRng::unpack_rng (char *packed) { unsigned char *p; unsigned int i, id; - p = (unsigned char *) packed; + p = (unsigned char*) packed; - if(this == NULL) { + if (this == NULL) + { return 0; } - - p += load_int(p,4,(unsigned int *)&rng_type); - - if (rng_type != rng_type/*Replace with proper value of rng_type*/) { - fprintf(stderr,"ERROR: Unpacked ' %d ' instead of ' %d '\n", rng_type, rng_type); + + p += load_int (p, 4, (unsigned int*) &rng_type); + + if (rng_type != rng_type/*Replace with proper value of rng_type*/) + { + fprintf (stderr, "ERROR: Unpacked ' %d ' instead of ' %d '\n",rng_type, rng_type); return 0; } - p += load_int(p,4,(unsigned int *)&rng_type); - p += load_int(p,4,(unsigned int *)init_seed); - p += load_int(p,4,(unsigned int *)parameter); - - p += load_int(p,4,(unsigned int *)narrays); - - p + load_intarray(p,narrays,4,array_sizes); - + p += load_int (p, 4, (unsigned int*) &rng_type); + p += load_int (p, 4, (unsigned int*) init_seed); + p += load_int (p, 4, (unsigned int*) parameter); + + p += load_int (p, 4, (unsigned int*) narrays); + + p + load_intarray (p, narrays, 4, array_sizes); + for (i = 0; i < narrays; ++i) { - p += load_intarray(p, array_sizes[i], 4, arrays[i]); + p += load_intarray (p, array_sizes[i], 4, arrays[i]); } - - - if(parameter < 0 || parameter >= NPARAMS) + + if (parameter < 0 || parameter >= NPARAMS) { - fprintf(stderr,"ERROR: Unpacked parameters not acceptable.\n"); - free(this); + fprintf (stderr, "ERROR: Unpacked parameters not acceptable.\n"); + free (this); return 0; } - + NGENS++; return 1; } - -int MyRng::get_seed_rng() +int MyRng::get_seed_rng () { return init_seed; } - -int MyRng::print_rng() +int MyRng::print_rng () { - - printf("\n%s\n", GENTYPE); - - printf("\n \tseed = %d, stream_number = %d\tparameter = %d\n\n", init_seed, stream_number, parameter); + printf ("\n%s\n", GENTYPE); + + printf ("\n \tseed = %d, stream_number = %d\tparameter = %d\n\n", + init_seed, stream_number, parameter); + return 1; } - - -/*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ +/*********************************************************************************** + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/SRC/.template.h sprng5/SRC/.template.h --- sprng5.orig/SRC/.template.h 2014-08-25 17:56:46.000000000 +0000 +++ sprng5/SRC/.template.h 2021-01-15 16:37:38.000000000 +0000 @@ -21,21 +21,21 @@ #ifndef _myrng_h #define _myrng_h -extern "C" +extern "C" { class MyRng : public Sprng { public: - MyRng(); /* default constructor */ - int init_rng(int, int, int, int); /* init function */ - ~MyRng(); /* destructor */ - MyRng (const MyRng &); /* copy constructor */ - MyRng & operator = (const MyRng &); /* asignment operator */ + MyRng (); /* default constructor */ + int init_rng (int, int, int, int); /* init function */ + ~MyRng (); /* destructor */ + MyRng (const MyRng&); /* copy constructor */ + MyRng& operator = (const MyRng&); /* asignment operator */ - int get_rn_int (); /* returns integer */ - float get_rn_flt (); /* returns float */ - double get_rn_dbl (); /* returns double */ + int get_rn_int (); /* returns integer */ + float get_rn_flt (); /* returns float */ + double get_rn_dbl (); /* returns double */ int spawn_rng (int nspawned, Sprng ***newgens, int checkid); int get_seed_rng (); int free_rng (); @@ -56,19 +56,18 @@ int **arrays; int spawn_offset; /*** declare other variables here ***/ - double x; /* please remove this in your implementation */ + double x; /* please remove this in your implementation */ }; } #endif - - -/*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ + +/*********************************************************************************** + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/SRC/.vtemplate.cpp sprng5/SRC/.vtemplate.cpp --- sprng5.orig/SRC/.vtemplate.cpp 2014-08-25 17:56:49.000000000 +0000 +++ sprng5/SRC/.vtemplate.cpp 2021-05-12 12:32:20.000000000 +0000 @@ -3,14 +3,14 @@ /* A PARALLEL RANDOM NUMBER GENERATION SYSTEM IN SPRNG FORMAT */ /* */ /* Check for more changes needed to add a new rng in DOCS */ -/* */ +/* */ /* Modifed by J.Ren */ /* Florida State University */ /* Email: ren@csit.fsu.edu */ /* Based on implentation by */ /* Ashok Srinivasan (Apr 13, 1998) */ -/* */ /* */ +/* */ /* Note: Data stored by 'pack_rng' is NOT in a machine independent */ /* format. For that, please take a look at some SPRNG examples */ /* (lcg/lcg.cpp, lfg/lfg.cpp, etc). */ @@ -28,21 +28,18 @@ using namespace std; - /*** Change this to the type of generator you are implementing ***/ #define GENTYPE "Sample Generator" - #define MAX_STREAMS MyRng_MAX_STREAMS #define NGENS MyRng_NGENS #define NPARAMS 1 /*** number of valid parameters ***/ -int MAX_STREAMS = (1<<19); /*** Maximum number of independent streams ***/ +int MAX_STREAMS = (1 << 19); /*** Maximum number of independent streams ***/ -int NGENS=0; /* number of random streams in current process */ +int NGENS = 0; /* number of random streams in current process */ - -MyRng::MyRng() /* default constructor */ +MyRng::MyRng () /* default constructor */ { /* modify if necessary */ gentype = NULL; @@ -54,354 +51,340 @@ /*Change this based on your generator needs*/ nvectors = 0; - + /* add other variables here */ double x = 0.0; /* please remove this in your implementation */ } - /* Initialize random number stream */ - -int MyRng::init_rng(int gn, int tg, int s, int p) +int MyRng::init_rng (int gn, int tg, int s, int p) { -/* gives back one stream (node gennum) with updated spawning */ -/* info; should be called total_gen times, with different value */ -/* of gennum in [0,total_gen) each call */ + /* gives back one stream (node gennum) with updated spawning */ + /* info; should be called total_gen times, with different value */ + /* of gennum in [0,total_gen) each call */ int i; - + if (tg <= 0) /* Is total_gen valid ? */ - { - tg = 1; - fprintf(stderr,"WARNING - init_rng: Total_gen <= 0. Default value of 1 used for total_gen\n"); - } + { + tg = 1; + fprintf (stderr,"WARNING - init_rng: Total_gen <= 0. Default value of 1 used for total_gen\n"); + } if (gn >= MAX_STREAMS) /* check if gen_num is valid */ - fprintf(stderr,"WARNING - init_rng: gennum: %d > maximum number of independent streams: %d\n\tIndependence of streams cannot be guranteed.\n", - gn, MAX_STREAMS); + fprintf (stderr,"WARNING - init_rng: gennum: %d > maximum number of independent streams: %d\n\tIndependence of streams cannot be guranteed.\n", + gn, MAX_STREAMS); if (gn < 0 || gn >= tg) /* check if gen_num is valid */ - { - fprintf(stderr,"ERROR - init_rng: gennum %d out of range [%d,%d).\n", - gn, 0, tg); + { + fprintf (stderr, "ERROR - init_rng: gennum %d out of range [%d,%d).\n",gn, 0, tg); - return 0; - } + return 0; + } - if (p < 0 || p >= NPARAMS) /* check if parameter is valid */ - { - fprintf(stderr,"WARNING - init_rng: parameter not valid. Using Default parameter.\n"); - p = 0; - } - - /* check if memory allocated for data structure */ - if ((MyRng *) mymalloc(1*sizeof(MyRng) == NULL) { - cerr << "Memory allocation error: init_rng\n"; - return 0; - } - - /* Initiallize data structure variables */ - gentype = GENTYPE; - stream_number = gn; - nstreams = tg; - init_seed = s & 0x7fffffff; /* Only 31 LSB of seed considered */ - parameter = p; - spawn_offset = tg; - - /*** Change the next line depending on your generators data needs ***/ - nvectors = 0; - - vectors.resize(nvectors); - - /*** Add initialization statements for your data in the vectors and other - variables you have defined ***/ - x = 0.1; /* Please remove this statement in your implementation */ - - NGENS++; /* NGENS = # of streams */ - - return 1; -} + if (p < 0 || p >= NPARAMS) /* check if parameter is valid */ + { + fprintf (stderr,"WARNING - init_rng: parameter not valid. Using Default parameter.\n"); + p = 0; + } -MyRng::~MyRng() -{ - free_rng(); -} + /* check if memory allocated for data structure */ + if ((MyRng *) mymalloc(1*sizeof(MyRng) == NULL) + { + cerr << "Memory allocation error: init_rng\n"; + return 0; + } -/* Copy constructor */ -MyRng::MyRng(const MyRng & c) -{ - /* modify if necessary */ - gentype = c.gentype; - stream_number = c.stream_number; - nstreams = c.nstreams; - init_seed = c.init_seed; - parameter = c.parameter; - nvectors = c.nvectors; - vectors = c.vectors; - spawn_offset = c.spawnoffset; + /* Initiallize data structure variables */ + gentype = GENTYPE; + stream_number = gn; + nstreams = tg; + init_seed = s & 0x7fffffff; /* Only 31 LSB of seed considered */ + parameter = p; + spawn_offset = tg; - /* add other variables here */ - double x = c.x; /* please remove this in your implementation */ -} + /*** Change the next line depending on your generators data needs ***/ + nvectors = 0; -/* Assignment operator */ -MyRng & MyRng::operator= (const MyRng &c) -{ - if (this != &c) { - /* copy assignments of variables from copy constructor */ - - /* modify if necessary */ - gentype = c.gentype; - stream_number = c.stream_number; - nstreams = c.nstreams; - init_seed = c.init_seed; - parameter = c.parameter; - nvectors = c.nvectors; - vectors = c.vectors; - spawn_offset = c.spawnoffset; + vectors.resize(nvectors); - /* add other variables here */ - double x = c.x; /* please remove this in your implementation */ - } - - return *this; + /*** Add initialization statements for your data in the vectors and other + variables you have defined ***/ + x = 0.1; /* Please remove this statement in your implementation */ + + NGENS++; /* NGENS = # of streams */ + + return 1; } + MyRng::~MyRng () + { + free_rng (); + } -/* Returns a double precision random number */ + /* Copy constructor */ + MyRng::MyRng (const MyRng &c) + { + /* modify if necessary */ + gentype = c.gentype; + stream_number = c.stream_number; + nstreams = c.nstreams; + init_seed = c.init_seed; + parameter = c.parameter; + nvectors = c.nvectors; + vectors = c.vectors; + spawn_offset = c.spawnoffset; -double MyRng::get_rn_dbl(); -{ - struct rngen *genptr = (struct rngen *) igenptr; + /* add other variables here */ + double x = c.x; /* please remove this in your implementation */ + } - /*** Use the data in the structure genptr to update your state. - Replace the statements below by those that return a double precision - number in [0,1). ***/ + /* Assignment operator */ + MyRng& MyRng::operator= (const MyRng &c) + { + if (this != &c) + { + /* copy assignments of variables from copy constructor */ - if(x>0.85) /* the statements below are here just for */ - x = 0.0; /* testing purposes. Please _do_ remove */ - else /* them in your implementation. */ - x += 0.1; - - return x; -} + /* modify if necessary */ + gentype = c.gentype; + stream_number = c.stream_number; + nstreams = c.nstreams; + init_seed = c.init_seed; + parameter = c.parameter; + nvectors = c.nvectors; + vectors = c.vectors; + spawn_offset = c.spawnoffset; + /* add other variables here */ + double x = c.x; /* please remove this in your implementation */ + } + return *this; + } -/* Return a random integer */ + /* Returns a double precision random number */ -int MyRng::get_rn_int() -{ - /* If you have a more efficient way of computing the random integer in - [0,2^31), then please replace the statement below with your scheme. */ + double MyRng::get_rn_dbl (); + { + struct rngen *genptr = (struct rngen *) igenptr; - return (int) (get_rn_dbl()*0x80000000); -} + /*** Use the data in the structure genptr to update your state. + Replace the statements below by those that return a double precision + number in [0,1). ***/ + if(x>0.85) /* the statements below are here just for */ + x = 0.0; /* testing purposes. Please _do_ remove */ + else /* them in your implementation. */ + x += 0.1; + return x; + } -/* Return a single precision random number */ + /* Return a random integer */ + int MyRng::get_rn_int () + { + /* If you have a more efficient way of computing the random integer in + [0,2^31), then please replace the statement below with your scheme. */ -float MyRng::get_rn_flt() -{ - /* If you have a more efficient way of computing the random integer, - then please replace the statement below with your scheme. */ + return (int) (get_rn_dbl () * 0x80000000); + } - return (float) get_rn_dbl(); -} + /* Return a single precision random number */ + float MyRng::get_rn_flt () + { + /* If you have a more efficient way of computing the random integer, + then please replace the statement below with your scheme. */ -/*************************************************************************/ -/*************************************************************************/ -/* SPAWN_RNG: spawns new generators */ -/*************************************************************************/ -/*************************************************************************/ + return (float) get_rn_dbl (); + } -int MyRng::spawn_rng(int nspawned, Sprng ***newgens, int checkid) -{ - MyRng ** genptr; - int i, j; - - if (nspawned <= 0) /* is nspawned valid ? */ - { - nspawned = 1; - fprintf(stderr,"WARNING - spawn_rng: nspawned <= 0. Default value of 1 used for nspawned\n"); - } + /*************************************************************************/ + /*************************************************************************/ + /* SPAWN_RNG: spawns new generators */ + /*************************************************************************/ + /*************************************************************************/ - genptr = (MyRng **) mymalloc(nspawned *sizeof(MyRng *)); - - if(genptr == NULL) /* allocate memory for pointers to structures */ - { - *newgens = NULL; - return 0; - } - - for(i=0; i MAX_STREAMS) /* change seed to avoid repeating sequence */ - seed = (init_seed)^gennum; - else - seed = init_seed; - - /* Initialize a stream. This stream has incorrect spawning information. - But we will correct it below. */ + int MyRng::spawn_rng (int nspawned, Sprng ***newgens, int checkid) + { + MyRng **genptr; + int i, j; - genptr[i] = new MyRng; - genptr[i]->init_rng(gennum, gennum+1, seed, parameter); - - if(genptr[i] == NULL) /* Was generator initiallized? */ + if (nspawned <= 0) /* is nspawned valid ? */ + { + nspawned = 1; + fprintf (stderr,"WARNING - spawn_rng: nspawned <= 0. Default value of 1 used for nspawned\n"); + } + + genptr = (MyRng**) mymalloc(nspawned * sizeof(MyRng*)); + + if (genptr == NULL) /* allocate memory for pointers to structures */ + { + *newgens = NULL; + return 0; + } + + for (i = 0; i < nspawned; i++) /* create nspawned new streams */ + { + int seed, gennum; + + gennum = stream_number + spawn_offset * (i + 1); + + if (gennum > MAX_STREAMS) /* change seed to avoid repeating sequence */ + seed = (init_seed) ^ gennum; + else + seed = init_seed; + + /* Initialize a stream. This stream has incorrect spawning information. + But we will correct it below. */ + + genptr[i] = new MyRng; + genptr[i]->init_rng (gennum, gennum + 1, seed, parameter); + + if (genptr[i] == NULL) /* Was generator initiallized? */ + { + nspawned = i; + break; + } + + genptr[i]->spawn_offset = (nspawned + 1) * spawn_offset; + } + + tempptr->spawn_offset *= (nspawned + 1); + *newgens = (Sprng**) genptr; + + if (checkid != 0) + for (i = 0; i < nspawned; i++) + if (addID ((int*) genptr[i]) == NULL) + return i; + + return nspawned; + } + + /* Free memory allocated for data structure associated with stream */ + + int MyRng::free_rng () { - nspawned = i; - break; + + assert (this != NULL); + + for (size_t i = 0; i < vectors.size (); ++i) + { + vectors[i].clear (); + } + + vectors.clear (); + + NGENS--; + return NGENS; } - - genptr[i]->spawn_offset = (nspawned+1)*spawn_offset; - } - - tempptr->spawn_offset *= (nspawned+1); - *newgens = (Sprng **) genptr; - - if(checkid != 0) - for(i=0; i= NPARAMS) - { - fprintf(stderr,"ERROR: Unpacked parameters not acceptable.\n"); - free(this); - return 0; - } - - NGENS++; + p += load_int (p, 4, (unsigned int*) &rng_type); + p += load_int (p, 4, (unsigned int*) init_seed); + p += load_int (p, 4, (unsigned int*) parameter); - return 1; -} + for (i = 0; i < vectors.size (); ++i) + { + p += load_intarray (p, vectors[i].size (), 4, vectors[i]); + } - -int MyRng::get_seed_rng() -{ - return init_seed; -} + if (parameter < 0 || parameter >= NPARAMS) + { + fprintf (stderr, "ERROR: Unpacked parameters not acceptable.\n"); + free (this); + return 0; + } + NGENS++; -int MyRng::print_rng() -{ - - printf("\n%s\n", GENTYPE); - - printf("\n \tseed = %d, stream_number = %d\tparameter = %d\n\n", init_seed, stream_number, parameter); + return 1; + } - return 1; -} + int MyRng::get_seed_rng () + { + return init_seed; + } - - -/*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ + int MyRng::print_rng () + { + + printf ("\n%s\n", GENTYPE); + + printf ("\n \tseed = %d, stream_number = %d\tparameter = %d\n\n",init_seed, stream_number, parameter); + + return 1; + } + + /*********************************************************************************** + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/SRC/.vtemplate.h sprng5/SRC/.vtemplate.h --- sprng5.orig/SRC/.vtemplate.h 2014-08-25 17:56:46.000000000 +0000 +++ sprng5/SRC/.vtemplate.h 2021-05-18 00:01:37.000000000 +0000 @@ -1,77 +1,76 @@ -/*************************************************************************/ -/*************************************************************************/ -/* A PARALLEL RANDOM NUMBER GENERATION SYSTEM IN SPRNG FORMAT */ -/* Header file */ -/* */ -/* Check for more changes needed to add a new rng in DOCS */ -/* */ -/* Author: J.Ren */ -/* Florida State University */ -/* Email: ren@csit.fsu.edu */ -/* Based on implentation by */ -/* Ashok Srinivasan (Apr 13, 1998) */ -/* */ -/* */ -/* Note: Data stored by 'pack_rng' is NOT in a machine independent */ -/* format. For that, please take a look at some SPRNG examples */ -/* (lcg/lcg.cpp, lfg/lfg.cpp, etc). */ -/*************************************************************************/ -/*************************************************************************/ - -#ifndef _myrng_h -#define _myrng_h - -#include - -extern "C" -{ - class MyRng : public Sprng - { - public: - - MyRng(); /* default constructor */ - int init_rng(int, int, int, int); /* init function */ - ~MyRng(); /* destructor */ - MyRng (const MyRng &); /* copy constructor */ - MyRng & operator = (const MyRng &); /* asignment operator */ - - int get_rn_int (); /* returns integer */ - float get_rn_flt (); /* returns float */ - double get_rn_dbl (); /* returns double */ - int spawn_rng (int nspawned, Sprng ***newgens, int checkid); - int get_seed_rng (); - int free_rng (); - int pack_rng (char **buffer); - int unpack_rng (char *packed); - int print_rng (); - - private: - - /* generator data members */ - char *gentype; - int stream_number; - int nstreams; - int init_seed; - int parameter; - - int nvectors; - std::vector > vectors; - - int spawn_offset; - /*** declare other variables here ***/ - double x; /* please remove this in your implementation */ - }; -} - -#endif - - -/*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ +/*************************************************************************/ +/*************************************************************************/ +/* A PARALLEL RANDOM NUMBER GENERATION SYSTEM IN SPRNG FORMAT */ +/* Header file */ +/* */ +/* Check for more changes needed to add a new rng in DOCS */ +/* */ +/* Author: J.Ren */ +/* Florida State University */ +/* Email: ren@csit.fsu.edu */ +/* Based on implentation by */ +/* Ashok Srinivasan (Apr 13, 1998) */ +/* */ +/* */ +/* Note: Data stored by 'pack_rng' is NOT in a machine independent */ +/* format. For that, please take a look at some SPRNG examples */ +/* (lcg/lcg.cpp, lfg/lfg.cpp, etc). */ +/*************************************************************************/ +/*************************************************************************/ + +#ifndef _myrng_h +#define _myrng_h + +#include + +extern "C" +{ + class MyRng : public Sprng + { + public: + + MyRng (); /* default constructor */ + int init_rng (int, int, int, int); /* init function */ + ~MyRng (); /* destructor */ + MyRng (const MyRng&); /* copy constructor */ + MyRng& operator = (const MyRng&); /* asignment operator */ + + int get_rn_int (); /* returns integer */ + float get_rn_flt (); /* returns float */ + double get_rn_dbl (); /* returns double */ + int spawn_rng (int nspawned, Sprng ***newgens, int checkid); + int get_seed_rng (); + int free_rng (); + int pack_rng (char **buffer); + int unpack_rng (char *packed); + int print_rng (); + + private: + + /* generator data members */ + char *gentype; + int stream_number; + int nstreams; + int init_seed; + int parameter; + + int nvectors; + std::vector > vectors; + + int spawn_offset; + /*** declare other variables here ***/ + double x; /* please remove this in your implementation */ + }; +} + +#endif + +/*********************************************************************************** + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/SRC/Makefile.in sprng5/SRC/Makefile.in --- sprng5.orig/SRC/Makefile.in 2018-07-21 20:24:20.000000000 +0000 +++ sprng5/SRC/Makefile.in 2021-06-08 16:40:20.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -308,6 +308,7 @@ MKDIR_P = @MKDIR_P@ MPICXX = @MPICXX@ MPIF77 = @MPIF77@ +MPI_CXXLIB = @MPI_CXXLIB@ MPI_DEF = @MPI_DEF@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ diff -urN sprng5.orig/SRC/basic.cpp sprng5/SRC/basic.cpp --- sprng5.orig/SRC/basic.cpp 2014-08-25 17:56:49.000000000 +0000 +++ sprng5/SRC/basic.cpp 2021-05-25 14:54:16.000000000 +0000 @@ -14,7 +14,8 @@ BigNum *list; }; -typedef struct DATATYPE1 { +typedef struct DATATYPE1 +{ long power; BigNum *valid; struct BIGNUM_ARRAY_TYPE denom; @@ -24,22 +25,20 @@ BigRat *magic; } REL_PRIME_TABLE; -void free_bn_array(struct BIGNUM_ARRAY_TYPE *array) +void free_bn_array (struct BIGNUM_ARRAY_TYPE *array) { long i; - - for(i=0; isize; i++) - (array->list[i]).b_clear(); - - delete [] array->list; + for (i = 0; i < array->size; i++) + (array->list[i]).b_clear (); + delete[] array->list; } - /* This function merges two arrays */ -extern struct BIGNUM_ARRAY_TYPE join(struct BIGNUM_ARRAY_TYPE first, struct BIGNUM_ARRAY_TYPE second) +extern struct BIGNUM_ARRAY_TYPE join (struct BIGNUM_ARRAY_TYPE first, + struct BIGNUM_ARRAY_TYPE second) { struct BIGNUM_ARRAY_TYPE result; - long count1 = 0; + long count1 = 0; long count2 = 0; BigNum absfirst, abssecond; @@ -47,281 +46,281 @@ // result.list = static_cast(malloc(result.size * sizeof(BigNum))); result.list = new BigNum[result.size]; - if ((count1 < first.size) && (count2 < second.size)) { - absfirst = b_abs(first.list[count1]); - abssecond = b_abs(second.list[count2]); + if ((count1 < first.size) && (count2 < second.size)) + { + absfirst = b_abs (first.list[count1]); + abssecond = b_abs (second.list[count2]); } + while ((count1 < first.size) && (count2 < second.size)) + { + if (b_cmp (absfirst, abssecond) > 0) + { + result.list[count1 + count2] = second.list[count2]; + ++count2; - while ((count1 < first.size) && (count2 < second.size)) { - if (b_cmp(absfirst, abssecond) > 0) { - result.list[count1+count2] = second.list[count2]; - ++count2; + if (count2 < second.size) + abssecond = b_abs (second.list[count2]); + } + else + { + result.list[count1 + count2] = first.list[count1]; + ++count1; - if (count2 < second.size) - abssecond = b_abs(second.list[count2]); - } - else { - result.list[count1+count2] = first.list[count1]; - ++count1; - - if (count1 < first.size) - absfirst = b_abs(first.list[count1]); - } + if (count1 < first.size) + absfirst = b_abs (first.list[count1]); + } } + absfirst.b_clear (); + abssecond.b_clear (); - absfirst.b_clear(); - abssecond.b_clear(); + for (; count1 < first.size; count1++) + result.list[count1 + count2] = first.list[count1]; - for (;count1 0) { - result.list[count2] = "0"; - - for (count=0;count 0) + { + result.list[count2] = "0"; + for (count = 0; count < set.size; count++) + { + result.list[count2] = set.list[count] * (*number); + plussed = b_abs (result.list[count2]); + if (b_cmp (plussed, *limit) < 0) + { + ++count2; + if (count2 < set.size) + result.list[count2] = "0"; + } + } } result.size = count2; - plussed.b_clear(); - - return(result); + plussed.b_clear (); + return (result); } - /* This makes a list of denominators out of a list of primes */ -extern struct BIGNUM_ARRAY_TYPE find_denom(BigNum * the_primes, long maxsize, BigNum *limit) +extern struct BIGNUM_ARRAY_TYPE find_denom (BigNum *the_primes, long maxsize, + BigNum *limit) { struct BIGNUM_ARRAY_TYPE newones, oldones, answer; int count; - if (maxsize > 1) - oldones = find_denom(&(the_primes[1]), maxsize-1, limit); - else { + oldones = find_denom (&(the_primes[1]), maxsize - 1, limit); + else + { oldones.size = 1; oldones.list = new BigNum[1]; oldones.list[0] = "1"; } - - newones = mult_reduce(the_primes, oldones, limit); - answer = join(oldones, newones); - - free_bn_array(&newones); - free_bn_array(&oldones); - - return(answer); + newones = mult_reduce (the_primes, oldones, limit); + answer = join (oldones, newones); + free_bn_array (&newones); + free_bn_array (&oldones); + return (answer); } /* Evaluates Mu function, given denominators */ -extern void mu_eval(BigNum * result, BigNum * x, struct BIGNUM_ARRAY_TYPE denominators) +extern void mu_eval (BigNum *result, BigNum *x, + struct BIGNUM_ARRAY_TYPE denominators) { BigNum val; long count = 0; - *result = "0"; val = "1"; - - while ((count < denominators.size) && (b_cmp(val, static_cast(0)) != 0)) { - val = *x / denominators.list[count]; - *result = *result + val; - count++; + while ((count < denominators.size) + && (b_cmp (val, static_cast (0)) != 0)) + { + val = *x / denominators.list[count]; + *result = *result + val; + count++; } - - val.b_clear(); + val.b_clear (); } /* Checks if x == 0 mod y, returns true if so */ -extern short divisible(BigNum * x, BigNum * y) +extern short divisible (BigNum *x, BigNum *y) { - return (*x % *y == static_cast(0)); + return (*x % *y == static_cast (0)); } /* Checks if any primes divide a number */ -extern short any_divide(BigNum * number, BigNum * the_primes, long no_of_primes) +extern short any_divide (BigNum *number, BigNum *the_primes, long no_of_primes) { - if (no_of_primes == 1) { - return(divisible(number, &(the_primes[0]))); + if (no_of_primes == 1) + { + return (divisible (number, &(the_primes[0]))); + } + else + { + if (divisible (number, &(the_primes[no_of_primes - 1]))) + { + return (1); } - else { - if (divisible(number, &(the_primes[no_of_primes-1]))) { - return(1); - } - else { - return(any_divide(number, the_primes, no_of_primes - 1)); - } + else + { + return (any_divide (number, the_primes, no_of_primes - 1)); } + } } -extern void incr(BigNum * x, long num) +extern void incr (BigNum *x, long num) { *x = *x + num; } -extern void decr(BigNum * x, long num) +extern void decr (BigNum *x, long num) { *x = *x - num; } /* Uses a linear search to find inverse value given guess, mu(guess) */ -extern BigNum linear_find(BigNum * y, BigNum * current_mu, BigNum * guess, struct BIGNUM_ARRAY_TYPE the_primes) +extern BigNum linear_find (BigNum *y, BigNum *current_mu, BigNum *guess, + struct BIGNUM_ARRAY_TYPE the_primes) { - while (b_cmp(*current_mu, *y) < 0) { - incr(guess, 1L); - - if (any_divide(guess, the_primes.list, the_primes.size)) { - } - else { - incr(current_mu, 1L); - } + while (b_cmp (*current_mu, *y) < 0) + { + incr (guess, 1L); + if (any_divide (guess, the_primes.list, the_primes.size)) + { + } + else + { + incr (current_mu, 1L); + } } - - while (b_cmp(*current_mu, *y) > 0) { - if (any_divide(guess, the_primes.list, the_primes.size)) - decr(guess, 1L); - else { - decr(guess, 1L); - decr(current_mu, 1L); - } + while (b_cmp (*current_mu, *y) > 0) + { + if (any_divide (guess, the_primes.list, the_primes.size)) + decr (guess, 1L); + else + { + decr (guess, 1L); + decr (current_mu, 1L); + } } - - while (any_divide(guess, the_primes.list, the_primes.size)) { - decr(guess, 1L); + while (any_divide (guess, the_primes.list, the_primes.size)) + { + decr (guess, 1L); } - - return(*guess); + return (*guess); } /* This guesses at mu_inverse */ -extern BigNum guess_mu_inverse(BigNum * y, BigRat * magic) +extern BigNum guess_mu_inverse (BigNum *y, BigRat *magic) { BigNum temp, guess; - temp = magic->br_get_num(); + temp = magic->br_get_num (); guess = (*y) * temp; - temp = magic->br_get_den(); + temp = magic->br_get_den (); guess = guess / temp; - temp.b_clear(); - - return(guess); -} + temp.b_clear (); + return (guess); +} /* Efficient caluculation of mu */ -extern void Mu(BigNum * result, BigNum * x, struct BIGNUM_ARRAY_TYPE left_to_kill, struct BIGNUM_ARRAY_TYPE the_final_denom) +extern void Mu (BigNum *result, BigNum *x, + struct BIGNUM_ARRAY_TYPE left_to_kill, + struct BIGNUM_ARRAY_TYPE the_final_denom) { BigNum subout, first, second; struct BIGNUM_ARRAY_TYPE new_kill; - - if (left_to_kill.size <= 0) { - mu_eval(result, x, the_final_denom); + if (left_to_kill.size <= 0) + { + mu_eval (result, x, the_final_denom); } - else { + else + { subout = (*x) / left_to_kill.list[0]; new_kill.size = left_to_kill.size - 1; new_kill.list = &(left_to_kill.list[1]); - Mu(&first, x, new_kill, the_final_denom); - Mu(&second, &subout, new_kill, the_final_denom); + Mu (&first, x, new_kill, the_final_denom); + Mu (&second, &subout, new_kill, the_final_denom); *result = first - second; - first.b_clear(); - second.b_clear(); - subout.b_clear(); + first.b_clear (); + second.b_clear (); + subout.b_clear (); } } /* finds the desired result, given y, the primes to be killed, the denominators, - the full set of initial primes, and the density of relative primes */ -extern BigNum find_M(BigNum * guess, BigNum * y, struct BIGNUM_ARRAY_TYPE left_to_kill, - struct BIGNUM_ARRAY_TYPE denom, struct BIGNUM_ARRAY_TYPE initial_primes, - BigRat *magic) + the full set of initial primes, and the density of relative primes */ +extern BigNum find_M (BigNum *guess, BigNum *y, + struct BIGNUM_ARRAY_TYPE left_to_kill, + struct BIGNUM_ARRAY_TYPE denom, + struct BIGNUM_ARRAY_TYPE initial_primes, BigRat *magic) { BigNum temp, temp2, current_mu; -#if 0 - Mu(¤t_mu, guess, left_to_kill, denom); - temp = y - current_mu; - temp2 = b_abs(temp); - - while (b_cmp(temp2, LINEAR_SEARCH_LIMIT) > 0) { + #if 0 + Mu(¤t_mu, guess, left_to_kill, denom); + temp = y - current_mu; + temp2 = b_abs(temp); + while (b_cmp(temp2, LINEAR_SEARCH_LIMIT) > 0) + { temp2 = guess_mu_inverse(&temp, magic); (*guess) = (*guess) + temp2; - Mu(¤t_mu, guess, left_to_kill, denom); - temp = y - current_mu; temp2 = b_abs(temp); } - temp = b_clear(); temp2 = b_clear(); + #else + *guess = "11"; + current_mu = "1"; + #endif + return (linear_find (y, ¤t_mu, guess, initial_primes)); +} -#else - - *guess = "11"; - current_mu = "1"; -#endif - return(linear_find(y, ¤t_mu, guess, initial_primes)); -} - /* setup. Note: 'int param' must be another argument if modulii other than 2^61-1 will be used */ -extern void init_rel_prime(REL_PRIME_TABLE * data, BigNum * maxval) +extern void init_rel_prime (REL_PRIME_TABLE *data, BigNum *maxval) { /* modified by cmdavis */ BigNum limit, num, denom; struct BIGNUM_ARRAY_TYPE the_primes; - - /* initialize 'data.power' */ + + /* initialize 'data.power' */ (*data).power = POWER_N; /* initialize 'data.valid' */ @@ -330,101 +329,96 @@ /* initialize 'data.prim' */ (*data).prim = new BigNum[1]; - *((*data).prim) = Set_ui(PRIM); + *((*data).prim) = Set_ui (PRIM); /* initialize 'data.magic' (density of relative primes) */ (*data).magic = new BigRat[1]; num = MAGIC_NUM; denom = MAGIC_DEN; - (*((*data).magic)).br_set_num(num); - (*((*data).magic)).br_set_den(denom); + (*((*data).magic)).br_set_num (num); + (*((*data).magic)).br_set_den (denom); /* initialize 'data.the_primes[]' */ - (*data).the_primes = init_factors(); + (*data).the_primes = init_factors (); - /* initialize 'data.kill_us[]' */ + /* initialize 'data.kill_us[]' */ (*data).kill_us.size = (*data).the_primes.size - MOST; - if ((*data).kill_us.size < 0) + if ((*data).kill_us.size < 0) (*data).kill_us.size = 0; (*data).kill_us.list = (*data).the_primes.list; - - /* initialize 'data.denom[]' */ - the_primes = minus(&((*data).the_primes.list[(*data).kill_us.size]), - (*data).the_primes.size - (*data).kill_us.size); + /* initialize 'data.denom[]' */ + the_primes = minus (&((*data).the_primes.list[(*data).kill_us.size]), + (*data).the_primes.size - (*data).kill_us.size); + /* define maximum value for which setup is valid */ - limit = guess_mu_inverse(maxval, (*data).magic); + limit = guess_mu_inverse (maxval, (*data).magic); limit = limit * 2; - (*data).denom = find_denom(the_primes.list, the_primes.size, &limit); + (*data).denom = find_denom (the_primes.list, the_primes.size, &limit); - limit.b_clear(); - num.b_clear(); - denom.b_clear(); - free_bn_array(&the_primes); + limit.b_clear (); + num.b_clear (); + denom.b_clear (); + free_bn_array (&the_primes); } -void free_rel_prime(REL_PRIME_TABLE *data) +void free_rel_prime (REL_PRIME_TABLE *data) { - (data->valid)->b_clear(); - (data->prim)->b_clear(); - delete [] data->magic; - free_bn_array(&(data->the_primes)); - free_bn_array(&(data->denom)); + (data->valid)->b_clear (); + (data->prim)->b_clear (); + delete[] data->magic; + free_bn_array (&(data->the_primes)); + free_bn_array (&(data->denom)); } /* find nth number relatively prime, given data */ -extern int rel_prime(BigNum * result, BigNum * number, REL_PRIME_TABLE data) +extern int rel_prime (BigNum *result, BigNum *number, REL_PRIME_TABLE data) { BigNum guess; int i; REL_PRIME_TABLE newdata; *result = "0"; - - if (b_cmp(*(data.valid), *number) >= 0) { - guess = (*(data.magic)).br_get_num(); - guess = guess_mu_inverse(number, data.magic); - - *result = find_M(&guess, number, - data.kill_us, data.denom, - data.the_primes, data.magic); + if (b_cmp (*(data.valid), *number) >= 0) + { + guess = (*(data.magic)).br_get_num (); + guess = guess_mu_inverse (number, data.magic); + *result = find_M (&guess, number, data.kill_us, data.denom, + data.the_primes, data.magic); } - else { - init_rel_prime(&newdata, number); - rel_prime(result, number, newdata); - free_rel_prime(&newdata); + else + { + init_rel_prime (&newdata, number); + rel_prime (result, number, newdata); + free_rel_prime (&newdata); } - /* Do NOT clear guess, since result uses its component array */ - return 0; } /* find nth primitive element, given data */ -extern void prim_elt(BigNum * result, BigNum * number, REL_PRIME_TABLE data) +extern void prim_elt (BigNum *result, BigNum *number, REL_PRIME_TABLE data) { - BigNum x, pow,temp; + BigNum x, pow, temp; x = "2"; - x = b_pow(x, data.power); + x = b_pow (x, data.power); x = x - 1; temp = *number; - temp = temp + 5UL; /* first few streams are bad; so offset by 5 streams */ - rel_prime(&pow, &temp, data); - *result = b_powm(*(data.prim), pow, x); + temp = temp + 5UL; /* first few streams are bad; so offset by 5 streams */ + rel_prime (&pow, &temp, data); + *result = b_powm (*(data.prim), pow, x); - pow.b_clear(); - temp.b_clear(); + pow.b_clear (); + temp.b_clear (); } - - -/*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ +/*********************************************************************************** + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/SRC/basic.h sprng5/SRC/basic.h --- sprng5.orig/SRC/basic.h 2014-08-25 17:56:46.000000000 +0000 +++ sprng5/SRC/basic.h 2021-05-18 00:04:03.000000000 +0000 @@ -1,64 +1,68 @@ -void free_bn_array(struct BIGNUM_ARRAY_TYPE *array); +void free_bn_array (struct BIGNUM_ARRAY_TYPE *array); /* This function merges two arrays */ -extern struct BIGNUM_ARRAY_TYPE join(struct BIGNUM_ARRAY_TYPE first, struct BIGNUM_ARRAY_TYPE second); +extern struct BIGNUM_ARRAY_TYPE join (struct BIGNUM_ARRAY_TYPE first, + struct BIGNUM_ARRAY_TYPE second); /* This function multiplies all elements by -1 */ -extern struct BIGNUM_ARRAY_TYPE minus(BigNum * list, long size); +extern struct BIGNUM_ARRAY_TYPE minus (BigNum *list, long size); /* This function multiplies and reduces an array */ -extern struct BIGNUM_ARRAY_TYPE mult_reduce(BigNum * number, struct BIGNUM_ARRAY_TYPE set, BigNum * limit); +extern struct BIGNUM_ARRAY_TYPE mult_reduce (BigNum *number, + struct BIGNUM_ARRAY_TYPE set,BigNum *limit); /* This makes a list of denominators out of a list of primes */ -extern struct BIGNUM_ARRAY_TYPE find_denom(BigNum * the_primes, long maxsize, BigNum *limit); +extern struct BIGNUM_ARRAY_TYPE find_denom (BigNum *the_primes, + long maxsize, BigNum *limit); /* Evaluates Mu function, given denominators */ -extern void mu_eval(BigNum * result, BigNum * x, struct BIGNUM_ARRAY_TYPE denominators); +extern void mu_eval (BigNum *result, BigNum *x,struct BIGNUM_ARRAY_TYPE denominators); /* Checks if x == 0 mod y, returns true if so */ -extern short divisible(BigNum * x, BigNum * y); +extern short divisible (BigNum *x, BigNum *y); /* Checks if any primes divide a number */ -extern short any_divide(BigNum * number, BigNum * the_primes, long no_of_primes); +extern short any_divide (BigNum *number, BigNum *the_primes, long no_of_primes); -extern void incr(BigNum * x, long num); -extern void decr(BigNum * x, long num); +extern void incr (BigNum *x, long num); +extern void decr (BigNum *x, long num); /* Uses a linear search to find inverse value given guess, mu(guess) */ -extern BigNum linear_find(BigNum * y, BigNum * current_mu, BigNum * guess, struct BIGNUM_ARRAY_TYPE the_primes); +extern BigNum linear_find (BigNum *y,BigNum *current_mu, BigNum *guess, + struct BIGNUM_ARRAY_TYPE the_primes); /* This guesses at mu_inverse */ -extern BigNum guess_mu_inverse(BigNum * y, BigRat * magic); +extern BigNum guess_mu_inverse (BigNum *y, BigRat *magic); /* Efficient caluculation of mu */ -extern void Mu(BigNum * result, BigNum * x, struct BIGNUM_ARRAY_TYPE left_to_kill, struct BIGNUM_ARRAY_TYPE the_final_denom); +extern void Mu (BigNum *result, BigNum *x, + struct BIGNUM_ARRAY_TYPE left_to_kill, + struct BIGNUM_ARRAY_TYPE the_final_denom); /* finds the desired result, given y, the primes to be killed, the denominators, - the full set of initial primes, and the density of relative primes */ -extern BigNum find_M(BigNum * guess, BigNum * y, struct BIGNUM_ARRAY_TYPE left_to_kill, - struct BIGNUM_ARRAY_TYPE denom, struct BIGNUM_ARRAY_TYPE initial_primes, - BigRat *magic); + the full set of initial primes, and the density of relative primes */ +extern BigNum find_M (BigNum *guess, BigNum *y, + struct BIGNUM_ARRAY_TYPE left_to_kill, + struct BIGNUM_ARRAY_TYPE denom, + struct BIGNUM_ARRAY_TYPE initial_primes, BigRat *magic); /* setup. Note: 'int param' must be another argument if modulii other than 2^61-1 will be used */ -extern void init_rel_prime(REL_PRIME_TABLE * data, BigNum * maxval); +extern void init_rel_prime (REL_PRIME_TABLE *data, BigNum *maxval); -void free_rel_prime(REL_PRIME_TABLE *data); +void free_rel_prime (REL_PRIME_TABLE *data); /* find nth number relatively prime, given data */ -extern int rel_prime(BigNum * result, BigNum * number, REL_PRIME_TABLE data); +extern int rel_prime (BigNum *result, BigNum *number, REL_PRIME_TABLE data); /* find nth primitive element, given data */ -extern void prim_elt(BigNum * result, BigNum * number, REL_PRIME_TABLE data); +extern void prim_elt (BigNum *result, BigNum *number, REL_PRIME_TABLE data); - - - -/*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ +/*********************************************************************************** + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/SRC/bignum.cpp sprng5/SRC/bignum.cpp --- sprng5.orig/SRC/bignum.cpp 2014-08-25 17:56:49.000000000 +0000 +++ sprng5/SRC/bignum.cpp 2021-05-25 14:54:16.000000000 +0000 @@ -1,1366 +1,1367 @@ -/*************************************************************************/ -/*************************************************************************/ -/* Implementation file for arithmetic on large integers */ -/* */ -/* Author: J. Ren, */ -/* Florida State Unversity */ -/* E-Mail: ren@csit.fsu.edu */ -/* */ -/*************************************************************************/ -/*************************************************************************/ - - -#if __GNUC__ > 3 - #include - #include -#else - #include -#endif -#include -#include -#include -#include -#if __GNUC__ > 3 - #include -#else - #include -#endif -#include -#include "bignum.h" - - -#ifdef LONG64 -#define NUMBITS 64 - -#else -#define NUMBITS 32 - -#endif - -using namespace std; - -/* default constructor */ -BigNum::BigNum() -{ - size = 1; - v = new unsigned long int[size]; - *v = 0; - sign = '+'; -} - -/* constructor by size */ -BigNum::BigNum(unsigned long int s) -{ - size = s; - sign = '+'; - v = new unsigned long int[s]; - - for (unsigned long int i = 0; i < s; i++) - v[i] = 0; -} - -BigNum::BigNum(char * c, char s) -{ - unsigned long int hexdigits = strlen(c); - unsigned long int index; - int n = NUMBITS / 4; - int mod = hexdigits % n; - int i, temp; - - sign = s; - - if (mod == 0) - size = hexdigits / n; - else - size = hexdigits / n + 1; - - v = new unsigned long int[size]; - - if (mod > 0) { - index = size - 1; - v[index] = 0; - - temp = mod * 4 - 4; - - for (i = temp; i >= 0; i-=4) - v[index] = v[index] ^ (static_cast(C2I(*c++)) << static_cast(i)); - - index = size - 1; - } - else - index = size; - - for (unsigned long int j = index; j > 0; j--) { - temp = j - 1; - - v[temp] = 0; - - for (i = NUMBITS - 4; i >= 0; i-= 4) - v[temp] = v[temp] ^ (static_cast(C2I(*c++)) << static_cast(i)); - } - -} - -/* Copy constructor */ -BigNum::BigNum(const BigNum &bn) -{ - size = bn.size; - sign = bn.sign; - v = new unsigned long int[size]; - - if (v == 0) { - cerr << "\nbn memory allocation failure\n"; - exit(EXIT_FAILURE); - } - - for (unsigned long int i = 0; i < size; i++) - v[i] = bn.v[i]; -} - -/* Assignment operator */ -BigNum& BigNum::operator= (const BigNum &bn) -{ - if (this != &bn) { - if (size != bn.size) { - if (v != NULL) - delete [] v; - - size = bn.size; - sign = bn.sign; - v = new unsigned long int[size]; - - if (v == 0) { - cerr << "\nbn memory allocation failure\n"; - exit(EXIT_FAILURE); - } - } - - for (unsigned long int i = 0; i < size; i++) - v[i] = bn.v[i]; - } - - return *this; -} - - -BigNum Set_ui(unsigned long int n) -{ - BigNum bn; - - *(bn.v) = n; - - return bn; -} - -BigNum Set_si(signed long int n) -{ - BigNum bn; - - bn.v = new unsigned long int[1]; - - if (n < 0) { - bn.sign = '-'; - *(bn.v) = 0 - n; - } - else - *(bn.v) = n; - - return bn; -} - -BigNum::~BigNum() -{ - if (v) - delete [] v; -} - -void BigNum::b_clear() -{ - if (v) { - delete [] v; - v = 0; - size = 0; - sign = 0; - } -} - -BigNum operator + (const BigNum & x, const BigNum & y) -{ - unsigned long int * xptr, * yptr, * zptr; - unsigned long int zsize; - unsigned long int temp, andtemp, ztemp; - unsigned long int carry = 0; - unsigned long int smallersize = SmallerSize(x, y); - unsigned long int biggersize = BiggerSize(x, y); - unsigned long int i; - BigNum zero; - - if (x.sign == '-') { - if (y.sign == '-') - return b_neg(b_abs(x) + b_abs(y)); - else if (y.sign == '+') { - if (b_cmp(b_abs(x), y) < 0) - return y - b_abs(x); - else if (b_cmp(b_abs(x), y) > 0) - return b_neg(b_abs(x) - y); - else if (b_cmp(b_abs(x), y) == 0) - return zero; - } - } - else if (x.sign == '+' && y.sign == '-') { - if (b_cmp(x, b_abs(y)) < 0) - return b_neg(b_abs(y) - x); - else if (b_cmp(x, b_abs(y)) > 0) - return x - b_abs(y); - else if (b_cmp(x, b_abs(y)) == 0) - return zero; - } - - if (x.size > y.size) - zsize = x.size + 1; - else - zsize = y.size + 1; - - BigNum z(zsize); - xptr = x.v; - yptr = y.v; - zptr = z.v; - - for (i = 0; i < smallersize; i++) { - ztemp = *zptr; - *zptr ^= *xptr ^ *yptr; - andtemp = *xptr & *yptr | *xptr & ztemp | *yptr & ztemp; - - if ((Test(*xptr, NUMBITS - 1) == 1) && (Test(*yptr, NUMBITS - 1) == 1)) { - *zptr = Set(*(++zptr), 0); - *(zptr--); - } - - carry = andtemp << 1; - - do { - andtemp = carry & *zptr; - - if ((Test(carry, NUMBITS - 1) == 1) && (Test(*zptr, NUMBITS - 1) == 1)) { - *zptr = Set(*(++zptr), 0); - *(zptr--); - } - - temp = andtemp << 1; - *zptr ^= carry; - carry = temp; - } while (temp != 0); - - *(++xptr); - *(++yptr); - *(++zptr); - } - - if (x.size != y.size) { - if (*zptr == 0) { - if (smallersize == x.size) { - while (i < z.size - 1) { - *(zptr++) = *(yptr++); - i++; - } - } - else { - while (i < z.size - 1) { - *(zptr++) = *(xptr++); - i++; - } - } - } - else { - if (smallersize == x.size) { - for (i = smallersize; i < biggersize; i++) { - ztemp = *zptr; - *zptr ^= *yptr; - andtemp = *yptr & ztemp; - carry = andtemp << 1; - - do { - andtemp = carry & *zptr; - - if ((Test(carry, NUMBITS - 1) == 1) && (Test(*zptr, NUMBITS - 1) == 1)) { - *zptr = Set(*(++zptr), 0); - *(zptr--); - } - - temp = andtemp << 1; - *zptr ^= carry; - carry = temp; - } while (temp != 0); - - *(++yptr); - *(++zptr); - } - } - else { - for (i = smallersize; i < biggersize; i++) { - ztemp = *zptr; - *zptr ^= *xptr; - andtemp = *xptr & ztemp; - carry = andtemp << 1; - - do { - andtemp = carry & *zptr; - - if ((Test(carry, NUMBITS - 1) == 1) && (Test(*zptr, NUMBITS - 1) == 1)) { - *zptr = Set(*(++zptr), 0); - *(zptr--); - } - - temp = andtemp << 1; - *zptr ^= carry; - carry = temp; - } while (temp != 0); - - *(++xptr); - *(++zptr); - } - } - } - } - - if (*zptr == 0) - z.size--; - - zero.b_clear(); - - return z; -} - -BigNum operator + (const BigNum & x, const unsigned long int y) -{ - BigNum bn_y = Set_ui(y); - - return x + bn_y; -} - -BigNum operator - (const BigNum & x, const BigNum & y) -{ - unsigned long int *xptr, *yptr, *zptr; - unsigned long int i; - unsigned long int temp, andtemp, ztemp; - unsigned long int carry = 0; - unsigned long int biggersize = BiggerSize(x, y); - unsigned long int smallersize = SmallerSize(x, y); - BigNum zero; - - if (x.sign == '+' && y.sign == '+' && b_cmp(x, y) == -1) - return b_neg(y - x); - else if ((x.sign == '-' && y.sign == '-') || (x.sign == '+' && y.sign == '-')) - return x + b_neg(y); - else if (x.sign == '-' && y.sign == '+') - return b_neg(b_abs(x) + y); - - BigNum z(biggersize + 1); - xptr = x.v; - yptr = y.v; - zptr = z.v; - - for (i = 0; i < smallersize; i++) { - ztemp = *zptr; - *zptr ^= *xptr ^ *yptr; - andtemp = (*yptr & *zptr) | (ztemp == 1 && Test(*xptr, 0) == 0 && - (Test(*yptr, 0) == 0 | Test(*yptr, 0) == 1)); - - if ((Test(*xptr, NUMBITS - 1) == 0) && (Test(*yptr, NUMBITS - 1) == 1)) { - *zptr = Set(*(++zptr), 0); - *(zptr--); - } - - carry = andtemp << 1; - - do { - andtemp = (carry ^ *zptr) & carry; - - if ((Test(carry, NUMBITS - 1) == 1) && (Test(*zptr, NUMBITS - 1) == 0)) { - *zptr = Set(*(++zptr), 0); - *(zptr--); - } - - temp = andtemp << 1; - *zptr ^= carry; - carry = temp; - } while (temp != 0); - - *(++xptr); - *(++yptr); - *(++zptr); - } - - if (x.size != y.size) { - if (*zptr == 0 && smallersize == y.size) { - while (i < biggersize) { - i++; - *(zptr++) = *(xptr++); - } - } - else { - if (smallersize == x.size) { - for (i = smallersize; i < biggersize; i++) { - ztemp = *zptr; - *zptr ^= *yptr; - andtemp = (*yptr & *zptr) | (ztemp == 1 && - (Test(*yptr, 0) == 0 | Test(*yptr, 0) == 1)); - - if (Test(*yptr, NUMBITS - 1) == 1) { - *zptr = Set(*(++zptr), 0); - *(zptr--); - } - - carry = andtemp << 1; - - do { - andtemp = (carry ^ *zptr) & carry; - - if ((Test(carry, NUMBITS - 1) == 1) && (Test(*zptr, NUMBITS - 1) == 0)) { - *zptr = Set(*(++zptr), 0); - *(zptr--); - } - - temp = andtemp << 1; - *zptr ^= carry; - carry = temp; - } while (temp != 0); - - *(++yptr); - *(++zptr); - } - } - else { - for (i = smallersize; i < biggersize; i++) { - ztemp = *zptr; - *zptr ^= *xptr; - andtemp = (ztemp == 1 && Test(*xptr, 0) == 0); - carry = andtemp << 1; - - do { - andtemp = (carry ^ *zptr) & carry; - - if ((Test(carry, NUMBITS - 1) == 1) && (Test(*zptr, NUMBITS - 1) == 0)) { - *zptr = Set(*(++zptr), 0); - *(zptr--); - } - - temp = andtemp << 1; - *zptr ^= carry; - carry = temp; - } while (temp != 0); - - *(++xptr); - *(++zptr); - } - } - } - } - - if (z.size != 1) { - while (*zptr == 0) { - *(zptr--); - z.size--; - } - } - - if (z.size == 0) { - z.size++; - z.v[0] = 0; - } - - if ((x.size < y.size) || (x.size == y.size && z.size > x.size)) - z.sign = '-'; - - zero.b_clear(); - - return z; -} - -BigNum Sub4Div (const BigNum & x, const BigNum & y) -{ - unsigned long int *xptr, *yptr, *zptr; - unsigned long int i; - unsigned long int temp, andtemp, ztemp; - unsigned long int carry = 0; - unsigned long int biggersize = BiggerSize(x, y); - unsigned long int smallersize = SmallerSize(x, y); - BigNum zero; - BigNum z(biggersize + 1); - xptr = x.v; - yptr = y.v; - zptr = z.v; - - for (i = 0; i < smallersize; i++) { - ztemp = *zptr; - *zptr ^= *xptr ^ *yptr; - andtemp = (*yptr & *zptr) | (ztemp == 1 && Test(*xptr, 0) == 0 && - (Test(*yptr, 0) == 0 | Test(*yptr, 0) == 1)); - - if ((Test(*xptr, NUMBITS - 1) == 0) && (Test(*yptr, NUMBITS - 1) == 1)) { - *zptr = Set(*(++zptr), 0); - *(zptr--); - } - - carry = andtemp << 1; - - do { - andtemp = (carry ^ *zptr) & carry; - - if ((Test(carry, NUMBITS - 1) == 1) && (Test(*zptr, NUMBITS - 1) == 0)) { - *zptr = Set(*(++zptr), 0); - *(zptr--); - } - - temp = andtemp << 1; - *zptr ^= carry; - carry = temp; - } while (temp != 0); - - *(++xptr); - *(++yptr); - *(++zptr); - } - - if (x.size != y.size) { - if (*zptr == 0 && smallersize == y.size) { - while (i < biggersize) { - i++; - *(zptr++) = *(xptr++); - } - } - else { - if (smallersize == x.size) { - for (i = smallersize; i < biggersize; i++) { - ztemp = *zptr; - *zptr ^= *yptr; - andtemp = (*yptr & *zptr) | (ztemp == 1 && - (Test(*yptr, 0) == 0 | Test(*yptr, 0) == 1)); - - if (Test(*yptr, NUMBITS - 1) == 1) { - *zptr = Set(*(++zptr), 0); - *(zptr--); - } - - carry = andtemp << 1; - - do { - andtemp = (carry ^ *zptr) & carry; - - if ((Test(carry, NUMBITS - 1) == 1) && (Test(*zptr, NUMBITS - 1) == 0)) { - *zptr = Set(*(++zptr), 0); - *(zptr--); - } - - temp = andtemp << 1; - *zptr ^= carry; - carry = temp; - } while (temp != 0); - - *(++yptr); - *(++zptr); - } - } - else { - for (i = smallersize; i < biggersize; i++) { - ztemp = *zptr; - *zptr ^= *xptr; - andtemp = (ztemp == 1 && Test(*xptr, 0) == 0); - carry = andtemp << 1; - - do { - andtemp = (carry ^ *zptr) & carry; - - if ((Test(carry, NUMBITS - 1) == 1) && (Test(*zptr, NUMBITS - 1) == 0)) { - *zptr = Set(*(++zptr), 0); - *(zptr--); - } - - temp = andtemp << 1; - *zptr ^= carry; - carry = temp; - } while (temp != 0); - - *(++xptr); - *(++zptr); - } - } - } - } - - if (z.size != 1) { - while (*zptr == 0) { - *(zptr--); - z.size--; - } - } - - if (z.size == 0) { - z.size++; - z.v[0] = 0; - } - - if ((x.size < y.size) || (x.size == y.size && z.size > x.size)) - z.sign = '-'; - - zero.b_clear(); - - return z; -} - -BigNum operator - (const BigNum & x, const unsigned long int y) -{ - BigNum bn_y = Set_ui(y); - - return x - bn_y; -} - -BigNum operator * (const BigNum & x, const BigNum & y) -{ - unsigned long int j, k; - unsigned long int ysize; - int i; - unsigned long int *yptr; - BigNum z(1); - BigNum xcopy, ycopy; - - if (x.sign == '-' && y.sign == '-') - return b_abs(x) * b_abs(y); - else if (x.sign != y.sign) - return b_neg(b_abs(x) * b_abs(y)); - - if (x.size < y.size) { - xcopy = y; - ycopy = x; - yptr = ycopy.v; - ysize = ycopy.size; - } - else { - xcopy = x; - yptr = y.v; - ysize = y.size; - } - - k = 0; - - for (j = 0; j < ysize; j++) { - for (i = 0; i < NUMBITS; i++) { - if (Test(*yptr, i) == 1) { - if (k != 0) { - xcopy = xcopy << k; - k = 0; - } - - z = z + xcopy; - xcopy = xcopy << 1; - } - else - k++; - } - - *(yptr++); - } - - xcopy.b_clear(); - ycopy.b_clear(); - - return z; -} - -BigNum operator * (const BigNum & x, const unsigned long int y) -{ - BigNum bn_y = Set_ui(y); - - return x * bn_y; -} - -BigNum operator / (const BigNum & x, const BigNum & y) -{ - BigNum z; - BigNum xcopy = x; - BigNum xtemp, t; - BigNum difference; - BigNum zero(1); - unsigned long int diffbits = 0; - unsigned long int lostbits; - unsigned long int tempbits; - unsigned long int xtempbits; - unsigned long int shiftbits; - unsigned long int xbits = x.GetTotalBits(); - unsigned long int ybits = y.GetTotalBits(); - bool prevneg = false; - - if (x.sign == '-' && y.sign == '-') - return b_abs(x) / b_abs(y); - else if (x.sign != y.sign) - return b_neg(b_abs(x) / b_abs(y)); - - if (y == zero) { - cerr << "Division by 0 error"; - exit(EXIT_FAILURE); - } - - if (ybits > xbits) - return zero; - - z = zero; - - while (true) { - xbits = xcopy.GetTotalBits(); - - if (prevneg == false) - xtemp = xcopy >> (xbits - ybits); - else - xtemp = xcopy >> (xbits - ybits - 1); - - if (xbits < ybits) { - z = z << (xbits - diffbits); - break; - } - - difference = Sub4Div(xtemp, y); - diffbits = difference.GetTotalBits(); - xtempbits = xtemp.GetTotalBits(); - z = z << shiftbits; - - if (difference == zero) { - z = z << 1; - z = z ^ 1; - shiftbits = ybits - 1; - tempbits = xbits - ybits; - - if (tempbits == 0) - break; - - xcopy = xcopy.EraseLeadingBits(ybits); - lostbits = tempbits - xcopy.GetTotalBits(); - z = z << lostbits; - prevneg = false; - } - else if (difference.sign == '-') { - z = z << 1; - tempbits = xbits - ybits; - shiftbits = 0; - - if (tempbits == 0) - break; - - prevneg = true; - } - else { /* difference is non-zero positive */ - z = z << 1; - z = z ^ 1; - tempbits = xbits - ybits; - - if (prevneg == false) { - if (tempbits == 0) - break; - - xcopy = xcopy.EraseLeadingBits(ybits); - lostbits = tempbits - xcopy.GetTotalBits(); - } - else { - if (tempbits - 1 == 0) - break; - - xcopy = xcopy.EraseLeadingBits(ybits + 1); - lostbits = tempbits - xcopy.GetTotalBits() - 1; - } - - xbits = xcopy.GetTotalBits(); - - if (lostbits == 0) { - t = difference << xbits; - xcopy = t ^ xcopy; - } - else { - t = difference << (xbits + lostbits); - xcopy = t ^ xcopy; - } - - if (ybits == diffbits) { - shiftbits = 0; - prevneg = true; - } - else { - shiftbits = ybits - diffbits - 1; - prevneg = false; - } - } - } - - xtemp.b_clear(); - t.b_clear(); - difference.b_clear(); - zero.b_clear(); - - return z; -} - -BigNum operator / (const BigNum & x, const unsigned long int y) -{ - BigNum bn_y = Set_ui(y); - - return x / bn_y; -} - -BigNum operator % (const BigNum & x, const BigNum & y) -{ - if (x.GetTotalBits() < y.GetTotalBits()) - return x; - - if (x.sign == '+') - return x - x / y * y; - else - return y - b_abs(x) % y; -} - -BigNum operator % (BigNum & x, const unsigned long int y) -{ - BigNum bn_y = Set_ui(y); - - return x % bn_y; -} - -BigNum operator ^ (const BigNum & x, const BigNum & y) -{ - unsigned long int zsize; - unsigned long int biggersize, smallersize; - unsigned long int *xptr, *yptr, *zptr; - unsigned long int i; - - biggersize = BiggerSize(x, y); - smallersize = SmallerSize(x, y); - zsize = biggersize; - BigNum z(zsize); - xptr = x.v; - yptr = y.v; - zptr = z.v; - - for (i = 0; i < smallersize; i++) - *(zptr++) = *(xptr++) ^ *(yptr++); - - if (biggersize == smallersize) - return z; - - if (biggersize == x.size) { - for (i = smallersize; i < biggersize; i++) - *(zptr++) = *(xptr++); - - while (*(zptr--) == 0 && zsize > 1) - zsize--; - } - else - for (i = smallersize; i < biggersize; i++) - *(zptr++) = *(yptr++); - - return z; -} - -BigNum operator ^ (const BigNum & x, const unsigned long int y) -{ - BigNum z = x; - *(z.v) ^= y; - - return z; -} - -unsigned long int operator & (const BigNum & x, const unsigned long int y) -{ - return *(x.v) & y; -} - -BigNum operator >> (BigNum & x, unsigned long int index) -{ - unsigned long int indexmod; - unsigned long int zsize; - unsigned long int lastbits; - unsigned long int bitscopy = 0; - unsigned long int *xptr, *zptr; - unsigned long int xbits = x.GetTotalBits(); - unsigned long int shiftamount; - unsigned long int zfirstbits; - unsigned long int i; - BigNum zero(1); - - if (index >= xbits) - return zero; - - zsize = CeilDiv(xbits - index, NUMBITS); - indexmod = index % NUMBITS; - shiftamount = NUMBITS - indexmod; - BigNum z(zsize); - zfirstbits = (xbits - index) % NUMBITS; - xptr = &(x.v[x.size-1]); - zptr = &(z.v[z.size-1]); - - if (index == 0 || x == zero) - return x; - - if (indexmod == 0) { - for (i = 0; i < zsize; i++) - *(zptr--) = *(xptr--); - } - else { - if (GetNumBits(*xptr) < static_cast(zfirstbits % NUMBITS) || ((xbits - index) % NUMBITS == 0)) { - bitscopy = *xptr << shiftamount; - *(xptr--); - } - - for (i = 0; i < zsize; i++) { - *zptr = *xptr; - lastbits = *zptr << shiftamount; - *zptr >>= indexmod; - *zptr ^= bitscopy; - bitscopy = lastbits; - *(xptr--); - *(zptr--); - } - } - - zero.b_clear(); - - return z; -} - -BigNum operator << (BigNum & x, unsigned long int index) -{ - BigNum zero(1); - - if (index == 0 || x == zero) { - return x; - } - - unsigned long int indexmod; - unsigned long int zsize; - unsigned long int amount; - unsigned long int shiftamount; - unsigned long int firstbits; - unsigned long int bitscopy = 0; - unsigned long int *xptr, *zptr; - unsigned long int i; - zsize = CeilDiv(index + x.GetTotalBits(), NUMBITS); - indexmod = index % NUMBITS; - amount = (index - indexmod) / NUMBITS; - shiftamount = NUMBITS - indexmod; - BigNum z(zsize); - - xptr = x.v; - zptr = z.v; - - for (i = 0; i < amount; i++) - *(zptr++) = 0; - - if (indexmod == 0) { - for (i = 0; i < x.size; i++) - *(zptr++) = *(xptr++); - } - else { - for (i = 0; i < x.size; i++) { - *zptr = *xptr; - firstbits = *zptr >> shiftamount; - *zptr <<= indexmod; - *zptr ^= bitscopy; - bitscopy = firstbits; - *(xptr++); - *(zptr++); - } - } - - if (x.size + amount < zsize) - *zptr = bitscopy; - - zero.b_clear(); - - return z; -} - -BigNum b_div_2exp (const BigNum & x, const unsigned long int ex_of_2) -{ - BigNum two = Set_ui(2ul); - BigNum z = x / (two << (ex_of_2 - 1ul)); - - two.b_clear(); - - return z; -} - -BigNum b_pow (const BigNum & base, const unsigned long int exp) -{ - BigNum product = Set_ui(1ul); - - for (unsigned long int i = 0; i < exp; i++) - product = product * base; - - return product; -} - -BigNum b_powm (const BigNum & base, const BigNum & exp, const BigNum & mod) -{ - BigNum product = Set_ui(1ul); - BigNum ex = exp; - BigNum y = base; - unsigned long int zero = 0; - - if (exp.sign == '-') { - cerr << "exp is negative\n"; - exit(EXIT_FAILURE); - } - - while (b_cmp(ex, zero) > 0) { - if ((ex & 1) == 1) - product = (product * y) % mod; - - y = (y * y) % mod; - ex = ex >> 1; - } - - ex.b_clear(); - y.b_clear(); - - return product; -} - -BigNum b_powm (BigNum & base, const unsigned long int exp, BigNum & mod) -{ - BigNum product = Set_ui(1ul); - BigNum y = base; - unsigned long int ex = exp; - - while (ex > 0) { - if (ex & 1 == 1) - product = (product * y) % mod; - - y = (y * y) % mod; - ex = ex >> 1; - } - - y.b_clear(); - - return product; -} - -unsigned long int BigNum::Size() const -{ - return size; -} - -unsigned long int * BigNum::V() const -{ - return v; -} - -char BigNum::Sign() const -{ - return sign; -} - -unsigned long int BigNum::b_get_ui() const -{ - return v[0]; -} - -BigNum b_abs(const BigNum & x) -{ - BigNum bn = x; - bn.sign = '+'; - - return bn; -} -BigNum b_abs2(const BigNum & x) -{ - BigNum bn = x; - bn.sign = '+'; - - return bn; -} - -BigNum b_neg(const BigNum & x) -{ - BigNum bn = x; - - if (bn.sign == '+') - bn.sign = '-'; - else - bn.sign = '+'; - - return bn; -} - -int b_cmp (const BigNum & x, const BigNum & y) -{ - unsigned long int * xptr, * yptr; - xptr = x.v + x.size - 1; - yptr = y.v + y.size - 1; - - if (x == y) - return 0; - else if (x.sign == '+' && y.sign == '-') - return 1; - else if (x.sign == '-' && y.sign == '+') - return -1; - else if (x.sign == y.sign) { - if (x.size > y.size) { - if (x.sign == '+') - return 1; - else - return -1; - } - else if (x.size < y.size) { - if (x.sign == '+') - return -1; - else - return 1; - } - - for (unsigned long int i = 0; i < x.size; i++) { - if (*xptr > *yptr) { - if (x.sign == '+') - return 1; - else - return -1; - } - else if (*xptr < *yptr) { - if (x.sign == '+') - return -1; - else - return 1; - } - - *xptr--; - *yptr--; - } - } - - // xptr = 0; - // yptr = 0; - - return 0; /* junk */ -} - -int b_cmp (const BigNum & x, const unsigned long int y) -{ - unsigned long int x_ui = x.b_get_ui(); - BigNum bn; - bn = Set_ui(y); - int result; - - if (x == bn) - result = 0; - else { - if (x.size > 1) { - if (x.sign == '+') - result = 1; - else - result = -1; - } - else { /* size == 1 */ - if (x_ui > y) { - if (x.sign == '+') - result = 1; - else - result = -1; - } - else { - if (x.sign == '-') - result = -1; - else - result = 1; - } - } - } - - bn.b_clear(); - - return result; -} - -int b_cmp (const BigNum & x, const signed long int y) -{ - int result; - unsigned long int x_ui; - BigNum bn; - bn = Set_si(y); - - if (x == bn) - result = 0; - else { - if (x.size > 1) { - if (x.sign == '+') - result = 1; - else - result = -1; - } - else { - x_ui = x.b_get_ui(); - - if (x_ui > 0) - result = 1; - else - result = -1; - } - } - - bn.b_clear(); - - return result; -} - -bool operator == (const BigNum & x, const BigNum & y) -{ - if (x.GetTotalBits() != y.GetTotalBits() || x.sign != y.sign) - return false; - - return memcmp(x.v, y.v, sizeof(unsigned long int) * x.size) == 0; -} - -bool operator == (const BigNum & x, const unsigned long int y) -{ - return (x.size == 1 && *(x.v) == y && x.sign == '+'); -} - -unsigned long int SmallerSize (const BigNum &x, const BigNum &y) -{ - if (x.Size() < y.Size()) - return x.Size(); - - return y.Size(); -} - -unsigned long int BiggerSize (const BigNum & x, const BigNum & y) -{ - if (x.Size() > y.Size()) - return x.Size(); - - return y.Size(); -} - -/* returns 0 bit for 0 */ -int GetNumBits (unsigned long int x) -{ - if (x == 0) - return 0; - - int bits = NUMBITS - 1; - - for (int i = bits; i > 0; i--) - if (Test(x, i) == 1) - return i + 1; - - return 1; -} - -unsigned long int BigNum::GetTotalBits() const -{ - return (size - 1) * NUMBITS + GetNumBits(v[size - 1]); -} - -BigNum BigNum::EraseLeadingBits(unsigned long int numbits) -{ - unsigned long int zsize; - unsigned long int modulus; - unsigned long int *zptr, *xptr; - unsigned long int xbits; - unsigned long int shiftamount; - - xbits = GetTotalBits(); - zsize = CeilDiv(GetTotalBits() - numbits, NUMBITS); - modulus = numbits % NUMBITS; - shiftamount = NUMBITS - (xbits - modulus) % NUMBITS; - BigNum z(zsize); - - zptr = z.v; - xptr = v; - - for (unsigned int i = 0; i < z.size; i++) - *(zptr++) = *(xptr++); - - *(zptr--); - *zptr = (*zptr << shiftamount) >> shiftamount; - - if (z.size != 1) - while (*zptr == 0 && z.size != 1) { - *(zptr--); - z.size--; - } - - return z; -} - -ostream& operator << (ostream& os, const BigNum& bn) -{ - unsigned long int * ptr; - unsigned long int i = 1; - - if (!bn.v) - return os; - - ptr = bn.v + bn.Size() - 1; - - os.setf(ios::uppercase); - os << hex << *ptr--; - - while (i < bn.size) { - i++; - - if (NUMBITS == 32) - os << setw(8) << setfill('0') << hex << *ptr--; - else - os << setw(16) << setfill('0') << hex << *ptr--; - } - - os << endl; - // ptr = 0; - - return os; -} - -void BigNum::b_print_w_sign() -{ - cout << sign << *this; -} - -/* Test bit value */ -int Test (const unsigned long int num, int index) -{ - return 0 != (num & (static_cast(1) << static_cast(index))); -} - -unsigned long int Set (const unsigned long int num, int index) -{ - return (num | (static_cast(1) << static_cast(index))); -} - -unsigned long int Unset (const unsigned long int num, int index) -{ - return (num & ~(static_cast(1) << static_cast(index))); -} - -unsigned long int CeilDiv (unsigned long int x, unsigned long int y) -{ - if (x % y > 0) - return x / y + 1; - - return x / y; -} - -int C2I(char c) -{ - if (c < 65) - return c - '0'; - else - return toupper(c) - 55; -} - - - - -/*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ +/*************************************************************************/ +/*************************************************************************/ +/* Implementation file for arithmetic on large integers */ +/* */ +/* Author: J. Ren, */ +/* Florida State Unversity */ +/* E-Mail: ren@csit.fsu.edu */ +/* */ +/*************************************************************************/ +/*************************************************************************/ + +#if __GNUC__ > 3 + #include + #include +#else +#include +#endif +#include +#include +#include +#include +#if __GNUC__ > 3 + #include +#else +#include +#endif +#include +#include "bignum.h" + +#ifdef LONG64 +#define NUMBITS 64 + +#else +#define NUMBITS 32 + +#endif + +using namespace std; + +/* default constructor */ +BigNum::BigNum () +{ + size = 1; + v = new unsigned long int[size]; + *v = 0; + sign = '+'; +} + +/* constructor by size */ +BigNum::BigNum (unsigned long int s) +{ + size = s; + sign = '+'; + v = new unsigned long int[s]; + + for (unsigned long int i = 0; i < s; i++) + v[i] = 0; +} + +BigNum::BigNum (char *c, char s) +{ + unsigned long int hexdigits = strlen (c); + unsigned long int index; + int n = NUMBITS / 4; + int mod = hexdigits % n; + int i, temp; + + sign = s; + if (mod == 0) + size = hexdigits / n; + else + size = hexdigits / n + 1; + v = new unsigned long int[size]; + if (mod > 0) + { + index = size - 1; + v[index] = 0; + + temp = mod * 4 - 4; + + for (i = temp; i >= 0; i -= 4) + v[index] = v[index] + ^ (static_cast (C2I (*c++)) + << static_cast (i)); + index = size - 1; + } + else + index = size; + for (unsigned long int j = index; j > 0; j--) + { + temp = j - 1; + v[temp] = 0; + + for (i = NUMBITS - 4; i >= 0; i -= 4) + v[temp] = v[temp] + ^ (static_cast (C2I (*c++)) + << static_cast (i)); + } +} + +/* Copy constructor */ +BigNum::BigNum (const BigNum &bn) +{ + size = bn.size; + sign = bn.sign; + v = new unsigned long int[size]; + if (v == 0) + { + cerr << "\nbn memory allocation failure\n"; + exit (EXIT_FAILURE); + } + for (unsigned long int i = 0; i < size; i++) + v[i] = bn.v[i]; +} + +/* Assignment operator */ +BigNum& BigNum::operator= (const BigNum &bn) +{ + if (this != &bn) + { + if (size != bn.size) + { + if (v != NULL) + delete[] v; + size = bn.size; + sign = bn.sign; + v = new unsigned long int[size]; + if (v == 0) + { + cerr << "\nbn memory allocation failure\n"; + exit (EXIT_FAILURE); + } + } + for (unsigned long int i = 0; i < size; i++) + v[i] = bn.v[i]; + } + return *this; +} + +BigNum Set_ui (unsigned long int n) +{ + BigNum bn; + *(bn.v) = n; + return bn; +} + +BigNum Set_si (signed long int n) +{ + BigNum bn; + bn.v = new unsigned long int[1]; + if (n < 0) + { + bn.sign = '-'; + *(bn.v) = 0 - n; + } + else + *(bn.v) = n; + return bn; +} + +BigNum::~BigNum () +{ + if (v) + delete[] v; +} + +void BigNum::b_clear () +{ + if (v) + { + delete[] v; + v = 0; + size = 0; + sign = 0; + } +} + +BigNum operator + (const BigNum &x, const BigNum &y) +{ + unsigned long int *xptr, *yptr, *zptr; + unsigned long int zsize; + unsigned long int temp, andtemp, ztemp; + unsigned long int carry = 0; + unsigned long int smallersize = SmallerSize (x, y); + unsigned long int biggersize = BiggerSize (x, y); + unsigned long int i; + BigNum zero; + + if (x.sign == '-') + { + if (y.sign == '-') + return b_neg (b_abs (x) + b_abs (y)); + else if (y.sign == '+') + { + if (b_cmp (b_abs (x), y) < 0) + return y - b_abs (x); + else if (b_cmp (b_abs (x), y) > 0) + return b_neg (b_abs (x) - y); + else if (b_cmp (b_abs (x), y) == 0) + return zero; + } + } + else if (x.sign == '+' && y.sign == '-') + { + if (b_cmp (x, b_abs (y)) < 0) + return b_neg (b_abs (y) - x); + else if (b_cmp (x, b_abs (y)) > 0) + return x - b_abs (y); + else if (b_cmp (x, b_abs (y)) == 0) + return zero; + } + + if (x.size > y.size) + zsize = x.size + 1; + else + zsize = y.size + 1; + BigNum z (zsize); + xptr = x.v; + yptr = y.v; + zptr = z.v; + for (i = 0; i < smallersize; i++) + { + ztemp = *zptr; + *zptr ^= *xptr ^ *yptr; + andtemp = *xptr & *yptr | *xptr & ztemp | *yptr & ztemp; + if ((Test (*xptr, NUMBITS - 1) == 1) && (Test (*yptr, NUMBITS - 1) == 1)) + { + *zptr = Set (*(++zptr), 0); + *(zptr--); + } + carry = andtemp << 1; + do + { + andtemp = carry & *zptr; + if ((Test (carry, NUMBITS - 1) == 1) + && (Test (*zptr, NUMBITS - 1) == 1)) + { + *zptr = Set (*(++zptr), 0); + *(zptr--); + } + temp = andtemp << 1; + *zptr ^= carry; + carry = temp; + } + while (temp != 0); + *(++xptr); + *(++yptr); + *(++zptr); + } + if (x.size != y.size) + { + if (*zptr == 0) + { + if (smallersize == x.size) + { + while (i < z.size - 1) + { + *(zptr++) = *(yptr++); + i++; + } + } + else + { + while (i < z.size - 1) + { + *(zptr++) = *(xptr++); + i++; + } + } + } + else + { + if (smallersize == x.size) + { + for (i = smallersize; i < biggersize; i++) + { + ztemp = *zptr; + *zptr ^= *yptr; + andtemp = *yptr & ztemp; + carry = andtemp << 1; + do + { + andtemp = carry & *zptr; + + if ((Test (carry, NUMBITS - 1) == 1) + && (Test (*zptr, NUMBITS - 1) == 1)) + { + *zptr = Set (*(++zptr), 0); + *(zptr--); + } + temp = andtemp << 1; + *zptr ^= carry; + carry = temp; + } + while (temp != 0); + *(++yptr); + *(++zptr); + } + } + else + { + for (i = smallersize; i < biggersize; i++) + { + ztemp = *zptr; + *zptr ^= *xptr; + andtemp = *xptr & ztemp; + carry = andtemp << 1; + do + { + andtemp = carry & *zptr; + if ((Test (carry, NUMBITS - 1) == 1) + && (Test (*zptr, NUMBITS - 1) == 1)) + { + *zptr = Set (*(++zptr), 0); + *(zptr--); + } + temp = andtemp << 1; + *zptr ^= carry; + carry = temp; + } + while (temp != 0); + *(++xptr); + *(++zptr); + } + } + } + } + if (*zptr == 0) + z.size--; + zero.b_clear (); + return z; +} + +BigNum operator + (const BigNum &x, const unsigned long int y) +{ + BigNum bn_y = Set_ui (y); + return x + bn_y; +} + +BigNum operator - (const BigNum &x, const BigNum &y) +{ + unsigned long int *xptr, *yptr, *zptr; + unsigned long int i; + unsigned long int temp, andtemp, ztemp; + unsigned long int carry = 0; + unsigned long int biggersize = BiggerSize (x, y); + unsigned long int smallersize = SmallerSize (x, y); + BigNum zero; + + if (x.sign == '+' && y.sign == '+' && b_cmp (x, y) == -1) + return b_neg (y - x); + else if ((x.sign == '-' && y.sign == '-') || (x.sign == '+' && y.sign == '-')) + return x + b_neg (y); + else if (x.sign == '-' && y.sign == '+') + return b_neg (b_abs (x) + y); + + BigNum z (biggersize + 1); + xptr = x.v; + yptr = y.v; + zptr = z.v; + for (i = 0; i < smallersize; i++) + { + ztemp = *zptr; + *zptr ^= *xptr ^ *yptr; + andtemp = (*yptr & *zptr) + | (ztemp == 1 && Test (*xptr, 0) == 0 + && (Test (*yptr, 0) == 0 | Test (*yptr, 0) == 1)); + if ((Test (*xptr, NUMBITS - 1) == 0) && (Test (*yptr, NUMBITS - 1) == 1)) + { + *zptr = Set (*(++zptr), 0); + *(zptr--); + } + carry = andtemp << 1; + do + { + andtemp = (carry ^ *zptr) & carry; + + if ((Test (carry, NUMBITS - 1) == 1) + && (Test (*zptr, NUMBITS - 1) == 0)) + { + *zptr = Set (*(++zptr), 0); + *(zptr--); + } + temp = andtemp << 1; + *zptr ^= carry; + carry = temp; + } + while (temp != 0); + *(++xptr); + *(++yptr); + *(++zptr); + } + if (x.size != y.size) + { + if (*zptr == 0 && smallersize == y.size) + { + while (i < biggersize) + { + i++; + *(zptr++) = *(xptr++); + } + } + else + { + if (smallersize == x.size) + { + for (i = smallersize; i < biggersize; i++) + { + ztemp = *zptr; + *zptr ^= *yptr; + andtemp = (*yptr & *zptr) + | (ztemp == 1 + && (Test (*yptr, 0) == 0 | Test (*yptr, 0) == 1)); + + if (Test (*yptr, NUMBITS - 1) == 1) + { + *zptr = Set (*(++zptr), 0); + *(zptr--); + } + carry = andtemp << 1; + do + { + andtemp = (carry ^ *zptr) & carry; + if ((Test (carry, NUMBITS - 1) == 1) + && (Test (*zptr, NUMBITS - 1) == 0)) + { + *zptr = Set (*(++zptr), 0); + *(zptr--); + } + temp = andtemp << 1; + *zptr ^= carry; + carry = temp; + } + while (temp != 0); + *(++yptr); + *(++zptr); + } + } + else + { + for (i = smallersize; i < biggersize; i++) + { + ztemp = *zptr; + *zptr ^= *xptr; + andtemp = (ztemp == 1 && Test (*xptr, 0) == 0); + carry = andtemp << 1; + do + { + andtemp = (carry ^ *zptr) & carry; + + if ((Test (carry, NUMBITS - 1) == 1) + && (Test (*zptr, NUMBITS - 1) == 0)) + { + *zptr = Set (*(++zptr), 0); + *(zptr--); + } + temp = andtemp << 1; + *zptr ^= carry; + carry = temp; + } + while (temp != 0); + *(++xptr); + *(++zptr); + } + } + } + } + if (z.size != 1) + { + while (*zptr == 0) + { + *(zptr--); + z.size--; + } + } + if (z.size == 0) + { + z.size++; + z.v[0] = 0; + } + if ((x.size < y.size) || (x.size == y.size && z.size > x.size)) + z.sign = '-'; + zero.b_clear (); + return z; +} + +BigNum Sub4Div (const BigNum &x, const BigNum &y) +{ + unsigned long int *xptr, *yptr, *zptr; + unsigned long int i; + unsigned long int temp, andtemp, ztemp; + unsigned long int carry = 0; + unsigned long int biggersize = BiggerSize (x, y); + unsigned long int smallersize = SmallerSize (x, y); + BigNum zero; + BigNum z (biggersize + 1); + xptr = x.v; + yptr = y.v; + zptr = z.v; + + for (i = 0; i < smallersize; i++) + { + ztemp = *zptr; + *zptr ^= *xptr ^ *yptr; + andtemp = (*yptr & *zptr) + | (ztemp == 1 && Test (*xptr, 0) == 0 + && (Test (*yptr, 0) == 0 | Test (*yptr, 0) == 1)); + if ((Test (*xptr, NUMBITS - 1) == 0) && (Test (*yptr, NUMBITS - 1) == 1)) + { + *zptr = Set (*(++zptr), 0); + *(zptr--); + } + carry = andtemp << 1; + do + { + andtemp = (carry ^ *zptr) & carry; + if ((Test (carry, NUMBITS - 1) == 1) + && (Test (*zptr, NUMBITS - 1) == 0)) + { + *zptr = Set (*(++zptr), 0); + *(zptr--); + } + temp = andtemp << 1; + *zptr ^= carry; + carry = temp; + } + while (temp != 0); + *(++xptr); + *(++yptr); + *(++zptr); + } + if (x.size != y.size) + { + if (*zptr == 0 && smallersize == y.size) + { + while (i < biggersize) + { + i++; + *(zptr++) = *(xptr++); + } + } + else + { + if (smallersize == x.size) + { + for (i = smallersize; i < biggersize; i++) + { + ztemp = *zptr; + *zptr ^= *yptr; + andtemp = (*yptr & *zptr) + | (ztemp == 1 + && (Test (*yptr, 0) == 0 | Test (*yptr, 0) == 1)); + if (Test (*yptr, NUMBITS - 1) == 1) + { + *zptr = Set (*(++zptr), 0); + *(zptr--); + } + carry = andtemp << 1; + do + { + andtemp = (carry ^ *zptr) & carry; + if ((Test (carry, NUMBITS - 1) == 1) + && (Test (*zptr, NUMBITS - 1) == 0)) + { + *zptr = Set (*(++zptr), 0); + *(zptr--); + } + temp = andtemp << 1; + *zptr ^= carry; + carry = temp; + + } + while (temp != 0); + *(++yptr); + *(++zptr); + } + } + else + { + for (i = smallersize; i < biggersize; i++) + { + ztemp = *zptr; + *zptr ^= *xptr; + andtemp = (ztemp == 1 && Test (*xptr, 0) == 0); + carry = andtemp << 1; + do + { + andtemp = (carry ^ *zptr) & carry; + if ((Test (carry, NUMBITS - 1) == 1) + && (Test (*zptr, NUMBITS - 1) == 0)) + { + *zptr = Set (*(++zptr), 0); + *(zptr--); + } + temp = andtemp << 1; + *zptr ^= carry; + carry = temp; + } + while (temp != 0); + *(++xptr); + *(++zptr); + } + } + } + } + if (z.size != 1) + { + while (*zptr == 0) + { + *(zptr--); + z.size--; + } + } + if (z.size == 0) + { + z.size++; + z.v[0] = 0; + } + if ((x.size < y.size) || (x.size == y.size && z.size > x.size)) + z.sign = '-'; + zero.b_clear (); + return z; +} + +BigNum operator - (const BigNum &x, const unsigned long int y) +{ + BigNum bn_y = Set_ui (y); + return x - bn_y; +} + +BigNum operator * (const BigNum &x, const BigNum &y) +{ + unsigned long int j, k; + unsigned long int ysize; + int i; + unsigned long int *yptr; + BigNum z (1); + BigNum xcopy, ycopy; + + if (x.sign == '-' && y.sign == '-') + return b_abs (x) * b_abs (y); + else if (x.sign != y.sign) + return b_neg (b_abs (x) * b_abs (y)); + + if (x.size < y.size) + { + xcopy = y; + ycopy = x; + yptr = ycopy.v; + ysize = ycopy.size; + } + else + { + xcopy = x; + yptr = y.v; + ysize = y.size; + } + k = 0; + for (j = 0; j < ysize; j++) + { + for (i = 0; i < NUMBITS; i++) + { + if (Test (*yptr, i) == 1) + { + if (k != 0) + { + xcopy = xcopy << k; + k = 0; + } + z = z + xcopy; + xcopy = xcopy << 1; + } + else + k++; + } + *(yptr++); + } + xcopy.b_clear (); + ycopy.b_clear (); + return z; +} + +BigNum operator * (const BigNum &x, const unsigned long int y) +{ + BigNum bn_y = Set_ui (y); + return x * bn_y; +} + +BigNum operator / (const BigNum &x, const BigNum &y) +{ + BigNum z; + BigNum xcopy = x; + BigNum xtemp, t; + BigNum difference; + BigNum zero (1); + unsigned long int diffbits = 0; + unsigned long int lostbits; + unsigned long int tempbits; + unsigned long int xtempbits; + unsigned long int shiftbits; + unsigned long int xbits = x.GetTotalBits (); + unsigned long int ybits = y.GetTotalBits (); + bool prevneg = false; + + if (x.sign == '-' && y.sign == '-') + return b_abs (x) / b_abs (y); + else if (x.sign != y.sign) + return b_neg (b_abs (x) / b_abs (y)); + + if (y == zero) + { + cerr << "Division by 0 error"; + exit (EXIT_FAILURE); + } + + if (ybits > xbits) + return zero; + + z = zero; + while (true) + { + xbits = xcopy.GetTotalBits (); + if (prevneg == false) + xtemp = xcopy >> (xbits - ybits); + else + xtemp = xcopy >> (xbits - ybits - 1); + if (xbits < ybits) + { + z = z << (xbits - diffbits); + break; + } + difference = Sub4Div (xtemp, y); + diffbits = difference.GetTotalBits (); + xtempbits = xtemp.GetTotalBits (); + z = z << shiftbits; + if (difference == zero) + { + z = z << 1; + z = z ^ 1; + shiftbits = ybits - 1; + tempbits = xbits - ybits; + if (tempbits == 0) + break; + + xcopy = xcopy.EraseLeadingBits (ybits); + lostbits = tempbits - xcopy.GetTotalBits (); + z = z << lostbits; + prevneg = false; + } + else if (difference.sign == '-') + { + z = z << 1; + tempbits = xbits - ybits; + shiftbits = 0; + if (tempbits == 0) + break; + prevneg = true; + } + else + { + /* difference is non-zero positive */ + z = z << 1; + z = z ^ 1; + tempbits = xbits - ybits; + if (prevneg == false) + { + if (tempbits == 0) + break; + + xcopy = xcopy.EraseLeadingBits (ybits); + lostbits = tempbits - xcopy.GetTotalBits (); + } + else + { + if (tempbits - 1 == 0) + break; + + xcopy = xcopy.EraseLeadingBits (ybits + 1); + lostbits = tempbits - xcopy.GetTotalBits () - 1; + } + xbits = xcopy.GetTotalBits (); + if (lostbits == 0) + { + t = difference << xbits; + xcopy = t ^ xcopy; + } + else + { + t = difference << (xbits + lostbits); + xcopy = t ^ xcopy; + } + if (ybits == diffbits) + { + shiftbits = 0; + prevneg = true; + } + else + { + shiftbits = ybits - diffbits - 1; + prevneg = false; + } + } + } + xtemp.b_clear (); + t.b_clear (); + difference.b_clear (); + zero.b_clear (); + return z; +} + +BigNum operator / (const BigNum &x, const unsigned long int y) +{ + BigNum bn_y = Set_ui (y); + return x / bn_y; +} + +BigNum operator % (const BigNum &x, const BigNum &y) +{ + if (x.GetTotalBits () < y.GetTotalBits ()) + return x; + + if (x.sign == '+') + return x - x / y * y; + else + return y - b_abs (x) % y; +} + +BigNum operator % (BigNum &x, const unsigned long int y) +{ + BigNum bn_y = Set_ui (y); + return x % bn_y; +} + +BigNum operator ^ (const BigNum &x, const BigNum &y) +{ + unsigned long int zsize; + unsigned long int biggersize, smallersize; + unsigned long int *xptr, *yptr, *zptr; + unsigned long int i; + + biggersize = BiggerSize (x, y); + smallersize = SmallerSize (x, y); + zsize = biggersize; + BigNum z (zsize); + xptr = x.v; + yptr = y.v; + zptr = z.v; + + for (i = 0; i < smallersize; i++) + *(zptr++) = *(xptr++) ^ *(yptr++); + + if (biggersize == smallersize) + return z; + + if (biggersize == x.size) + { + for (i = smallersize; i < biggersize; i++) + *(zptr++) = *(xptr++); + while (*(zptr--) == 0 && zsize > 1) + zsize--; + } + else + for (i = smallersize; i < biggersize; i++) + *(zptr++) = *(yptr++); + return z; +} + +BigNum operator ^ (const BigNum &x, const unsigned long int y) +{ + BigNum z = x; + *(z.v) ^= y; + return z; +} + +unsigned long int operator & (const BigNum &x, const unsigned long int y) +{ + return *(x.v) & y; +} + +BigNum operator >> (BigNum &x, unsigned long int index) +{ + unsigned long int indexmod; + unsigned long int zsize; + unsigned long int lastbits; + unsigned long int bitscopy = 0; + unsigned long int *xptr, *zptr; + unsigned long int xbits = x.GetTotalBits (); + unsigned long int shiftamount; + unsigned long int zfirstbits; + unsigned long int i; + BigNum zero (1); + + if (index >= xbits) + return zero; + + zsize = CeilDiv (xbits - index, NUMBITS); + indexmod = index % NUMBITS; + shiftamount = NUMBITS - indexmod; + BigNum z (zsize); + zfirstbits = (xbits - index) % NUMBITS; + xptr = &(x.v[x.size - 1]); + zptr = &(z.v[z.size - 1]); + + if (index == 0 || x == zero) + return x; + + if (indexmod == 0) + { + for (i = 0; i < zsize; i++) + *(zptr--) = *(xptr--); + } + else + { + if (GetNumBits (*xptr) < static_cast (zfirstbits % NUMBITS) + || ((xbits - index) % NUMBITS == 0)) + { + bitscopy = *xptr << shiftamount; + *(xptr--); + } + for (i = 0; i < zsize; i++) + { + *zptr = *xptr; + lastbits = *zptr << shiftamount; + *zptr >>= indexmod; + *zptr ^= bitscopy; + bitscopy = lastbits; + *(xptr--); + *(zptr--); + } + } + zero.b_clear (); + return z; +} + +BigNum operator << (BigNum &x, unsigned long int index) +{ + BigNum zero (1); + if (index == 0 || x == zero) + { + return x; + } + unsigned long int indexmod; + unsigned long int zsize; + unsigned long int amount; + unsigned long int shiftamount; + unsigned long int firstbits; + unsigned long int bitscopy = 0; + unsigned long int *xptr, *zptr; + unsigned long int i; + zsize = CeilDiv (index + x.GetTotalBits (), NUMBITS); + indexmod = index % NUMBITS; + amount = (index - indexmod) / NUMBITS; + shiftamount = NUMBITS - indexmod; + BigNum z (zsize); + + xptr = x.v; + zptr = z.v; + + for (i = 0; i < amount; i++) + *(zptr++) = 0; + if (indexmod == 0) + { + for (i = 0; i < x.size; i++) + *(zptr++) = *(xptr++); + } + else + { + for (i = 0; i < x.size; i++) + { + *zptr = *xptr; + firstbits = *zptr >> shiftamount; + *zptr <<= indexmod; + *zptr ^= bitscopy; + bitscopy = firstbits; + *(xptr++); + *(zptr++); + } + } + + if (x.size + amount < zsize) + *zptr = bitscopy; + zero.b_clear (); + return z; +} + +BigNum b_div_2exp (const BigNum &x, const unsigned long int ex_of_2) +{ + BigNum two = Set_ui (2ul); + BigNum z = x / (two << (ex_of_2 - 1ul)); + two.b_clear (); + return z; +} + +BigNum b_pow (const BigNum &base, const unsigned long int exp) +{ + BigNum product = Set_ui (1ul); + for (unsigned long int i = 0; i < exp; i++) + product = product * base; + return product; +} + +BigNum b_powm (const BigNum &base, const BigNum &exp, const BigNum &mod) +{ + BigNum product = Set_ui (1ul); + BigNum ex = exp; + BigNum y = base; + unsigned long int zero = 0; + + if (exp.sign == '-') + { + cerr << "exp is negative\n"; + exit (EXIT_FAILURE); + } + + while (b_cmp (ex, zero) > 0) + { + if ((ex & 1) == 1) + product = (product * y) % mod; + y = (y * y) % mod; + ex = ex >> 1; + } + ex.b_clear (); + y.b_clear (); + return product; +} + +BigNum b_powm (BigNum &base, const unsigned long int exp, BigNum &mod) +{ + BigNum product = Set_ui (1ul); + BigNum y = base; + unsigned long int ex = exp; + + while (ex > 0) + { + if (ex & 1 == 1) + product = (product * y) % mod; + + y = (y * y) % mod; + ex = ex >> 1; + } + y.b_clear (); + return product; +} + +unsigned long int BigNum::Size () const +{ + return size; +} + +unsigned long int* BigNum::V () const +{ + return v; +} + +char BigNum::Sign () const +{ + return sign; +} + +unsigned long int BigNum::b_get_ui () const +{ + return v[0]; +} + +BigNum b_abs (const BigNum &x) +{ + BigNum bn = x; + bn.sign = '+'; + return bn; +} +BigNum b_abs2 (const BigNum &x) +{ + BigNum bn = x; + bn.sign = '+'; + return bn; +} + +BigNum b_neg (const BigNum &x) +{ + BigNum bn = x; + if (bn.sign == '+') + bn.sign = '-'; + else + bn.sign = '+'; + return bn; +} + +int b_cmp (const BigNum &x, const BigNum &y) +{ + unsigned long int *xptr, *yptr; + xptr = x.v + x.size - 1; + yptr = y.v + y.size - 1; + + if (x == y) + return 0; + else if (x.sign == '+' && y.sign == '-') + return 1; + else if (x.sign == '-' && y.sign == '+') + return -1; + else if (x.sign == y.sign) + { + if (x.size > y.size) + { + if (x.sign == '+') + return 1; + else + return -1; + } + else if (x.size < y.size) + { + if (x.sign == '+') + return -1; + else + return 1; + } + + for (unsigned long int i = 0; i < x.size; i++) + { + if (*xptr > *yptr) + { + if (x.sign == '+') + return 1; + else + return -1; + } + else if (*xptr < *yptr) + { + if (x.sign == '+') + return -1; + else + return 1; + } + *xptr--; + *yptr--; + } + } + // xptr = 0; + // yptr = 0; + return 0; /* junk */ +} + +int b_cmp (const BigNum &x, const unsigned long int y) +{ + unsigned long int x_ui = x.b_get_ui (); + BigNum bn; + bn = Set_ui (y); + int result; + + if (x == bn) + result = 0; + else + { + if (x.size > 1) + { + if (x.sign == '+') + result = 1; + else + result = -1; + } + else + { /* size == 1 */ + if (x_ui > y) + { + if (x.sign == '+') + result = 1; + else + result = -1; + } + else + { + if (x.sign == '-') + result = -1; + else + result = 1; + } + } + } + bn.b_clear (); + return result; +} + +int b_cmp (const BigNum &x, const signed long int y) +{ + int result; + unsigned long int x_ui; + BigNum bn; + bn = Set_si (y); + + if (x == bn) + result = 0; + else + { + if (x.size > 1) + { + if (x.sign == '+') + result = 1; + else + result = -1; + } + else + { + x_ui = x.b_get_ui (); + if (x_ui > 0) + result = 1; + else + result = -1; + } + } + bn.b_clear (); + return result; +} + +bool operator == (const BigNum &x, const BigNum &y) +{ + if (x.GetTotalBits () != y.GetTotalBits () || x.sign != y.sign) + return false; + + return memcmp (x.v, y.v, sizeof(unsigned long int) * x.size) == 0; +} + +bool operator == (const BigNum &x, const unsigned long int y) +{ + return (x.size == 1 && *(x.v) == y && x.sign == '+'); +} + +unsigned long int SmallerSize (const BigNum &x, const BigNum &y) +{ + if (x.Size () < y.Size ()) + return x.Size (); + + return y.Size (); +} + +unsigned long int BiggerSize (const BigNum &x, const BigNum &y) +{ + if (x.Size () > y.Size ()) + return x.Size (); + + return y.Size (); +} + +/* returns 0 bit for 0 */ +int GetNumBits (unsigned long int x) +{ + if (x == 0) + return 0; + + int bits = NUMBITS - 1; + for (int i = bits; i > 0; i--) + if (Test (x, i) == 1) + return i + 1; + + return 1; +} + +unsigned long int BigNum::GetTotalBits () const +{ + return (size - 1) * NUMBITS + GetNumBits (v[size - 1]); +} + +BigNum BigNum::EraseLeadingBits (unsigned long int numbits) +{ + unsigned long int zsize; + unsigned long int modulus; + unsigned long int *zptr, *xptr; + unsigned long int xbits; + unsigned long int shiftamount; + + xbits = GetTotalBits (); + zsize = CeilDiv (GetTotalBits () - numbits, NUMBITS); + modulus = numbits % NUMBITS; + shiftamount = NUMBITS - (xbits - modulus) % NUMBITS; + BigNum z (zsize); + + zptr = z.v; + xptr = v; + for (unsigned int i = 0; i < z.size; i++) + *(zptr++) = *(xptr++); + + *(zptr--); + *zptr = (*zptr << shiftamount) >> shiftamount; + if (z.size != 1) + while (*zptr == 0 && z.size != 1) + { + *(zptr--); + z.size--; + } + return z; +} + +ostream& operator << (ostream &os, const BigNum &bn) +{ + unsigned long int *ptr; + unsigned long int i = 1; + + if (!bn.v) + return os; + + ptr = bn.v + bn.Size () - 1; + os.setf (ios::uppercase); + os << hex << *ptr--; + while (i < bn.size) + { + i++; + if (NUMBITS == 32) + os << setw (8) << setfill ('0') << hex << *ptr--; + else + os << setw (16) << setfill ('0') << hex << *ptr--; + } + os << endl; + // ptr = 0; + return os; +} + +void BigNum::b_print_w_sign () +{ + cout << sign << *this; +} + +/* Test bit value */ +int Test (const unsigned long int num, int index) +{ + return 0 + != (num + & (static_cast (1) + << static_cast (index))); +} + +unsigned long int Set (const unsigned long int num, int index) +{ + return (num + | (static_cast (1) + << static_cast (index))); +} + +unsigned long int Unset (const unsigned long int num, int index) +{ + return (num + & ~(static_cast (1) + << static_cast (index))); +} + +unsigned long int CeilDiv (unsigned long int x, unsigned long int y) +{ + if (x % y > 0) + return x / y + 1; + + return x / y; +} + +int C2I (char c) +{ + if (c < 65) + return c - '0'; + else + return toupper (c) - 55; +} + +/*********************************************************************************** + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/SRC/bignum.h sprng5/SRC/bignum.h --- sprng5.orig/SRC/bignum.h 2014-08-25 17:56:46.000000000 +0000 +++ sprng5/SRC/bignum.h 2021-05-18 00:04:03.000000000 +0000 @@ -1,145 +1,136 @@ #if __GNUC__ > 3 #include #else - #include +#include #endif - -#ifndef BIGNUM_H -#define BIGNUM_H - - -class BigNum -{ - friend BigNum Set_ui (unsigned long int); - friend BigNum Set_si (signed long int); - - friend BigNum operator + (const BigNum &, const BigNum &); - friend BigNum operator + (const BigNum &, const unsigned long int); - friend BigNum operator - (const BigNum &, const BigNum &); - friend BigNum Sub4Div (const BigNum &, const BigNum &); - friend BigNum operator - (const BigNum &, const unsigned long int); - friend BigNum operator * (const BigNum &, const BigNum &); - friend BigNum operator * (const BigNum &, const unsigned long int); - friend BigNum operator / (const BigNum &, const BigNum &); - friend BigNum operator / (const BigNum &, const unsigned long int); - friend BigNum operator % (const BigNum &, const BigNum &); - friend BigNum operator % (const BigNum &, const unsigned long int); - friend BigNum operator ^ (const BigNum &, const BigNum &); - friend BigNum operator ^ (const BigNum &, const unsigned long int); - friend unsigned long int operator & (const BigNum &, const unsigned long int); - friend BigNum operator >> (BigNum &, unsigned long int); - friend BigNum operator << (BigNum &, unsigned long int); - friend BigNum b_div_2exp (const BigNum &, const unsigned long int); - friend BigNum b_pow (const BigNum &, const unsigned long int); - friend BigNum b_powm (const BigNum &, const BigNum &, const BigNum &); - friend BigNum b_powm (const BigNum &, const unsigned int, const BigNum &); - friend BigNum b_abs(const BigNum &); - friend BigNum b_abs2(const BigNum &); - friend BigNum b_neg(const BigNum &); - friend std::ostream& operator << (std::ostream &, const BigNum &); - - friend bool operator == (const BigNum &, const BigNum &); - friend bool operator == (const BigNum &, const unsigned long int); - friend int b_cmp (const BigNum &, const BigNum &); - friend int b_cmp (const BigNum &, const unsigned long int); - friend int b_cmp (const BigNum &, const signed long int); - - friend unsigned long int SmallerSize (const BigNum &, const BigNum &); - friend unsigned long int BiggerSize (const BigNum &, const BigNum &); - friend int Test (const unsigned long int, int); - friend unsigned long int Set (const unsigned long int, int); - friend unsigned long int Unset (const unsigned long int, int); - friend unsigned long int CeilDiv (unsigned long int, unsigned long int); - friend int GetNumBits (unsigned long int); - - friend int C2I(char c); - -public: - BigNum(); - BigNum(unsigned long int); - BigNum(char *, char s = '+'); - BigNum(const BigNum &); - BigNum& operator= (const BigNum &); - ~BigNum(); - - unsigned long int b_get_ui() const; - unsigned long int Size() const; - unsigned long int * V() const; - char Sign() const; - BigNum EraseLeadingBits(unsigned long int); - unsigned long int GetTotalBits() const; - void b_clear(); - void b_print_w_sign(); - - //private: - unsigned long int * v; - unsigned long int size; - char sign; -}; - -#endif - -#if (__GNUC__ > 3) - -BigNum Set_ui (unsigned long int); -BigNum Set_si (signed long int); - -BigNum operator + (const BigNum &, const BigNum &); -BigNum operator + (const BigNum &, const unsigned long int); -BigNum operator - (const BigNum &, const BigNum &); -BigNum Sub4Div (const BigNum &, const BigNum &); -BigNum operator - (const BigNum &, const unsigned long int); -BigNum operator * (const BigNum &, const BigNum &); -BigNum operator * (const BigNum &, const unsigned long int); -BigNum operator / (const BigNum &, const BigNum &); -BigNum operator / (const BigNum &, const unsigned long int); -BigNum operator % (const BigNum &, const BigNum &); -BigNum operator % (const BigNum &, const unsigned long int); -BigNum operator ^ (const BigNum &, const BigNum &); -BigNum operator ^ (const BigNum &, const unsigned long int); -unsigned long int operator & (const BigNum &, - const unsigned long int); -BigNum operator >> (BigNum &, unsigned long int); -BigNum operator << (BigNum &, unsigned long int); -BigNum b_div_2exp (const BigNum &, const unsigned long int); -BigNum b_pow (const BigNum &, const unsigned long int); -BigNum b_powm (const BigNum &, const BigNum &, - const BigNum &); -BigNum b_powm (const BigNum &, const unsigned int, - const BigNum &); -BigNum b_abs (const BigNum &); -BigNum b_abs2 (const BigNum &); -BigNum b_neg (const BigNum &); -std::ostream & operator << (std::ostream &, const BigNum &); - -bool operator == (const BigNum &, const BigNum &); -bool operator == (const BigNum &, const unsigned long int); -int b_cmp (const BigNum &, const BigNum &); -int b_cmp (const BigNum &, const unsigned long int); -int b_cmp (const BigNum &, const signed long int); - -unsigned long int SmallerSize (const BigNum &, - const BigNum &); -unsigned long int BiggerSize (const BigNum &, - const BigNum &); -int Test (const unsigned long int, int); -unsigned long int Set (const unsigned long int, int); -unsigned long int Unset (const unsigned long int, int); -unsigned long int CeilDiv (unsigned long int, - unsigned long int); -int GetNumBits (unsigned long int); - -int C2I (char c); - -#endif - - -/*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ + +#ifndef BIGNUM_H +#define BIGNUM_H + +class BigNum +{ + friend BigNum Set_ui (unsigned long int); + friend BigNum Set_si (signed long int); + + friend BigNum operator + (const BigNum&, const BigNum&); + friend BigNum operator + (const BigNum&, const unsigned long int); + friend BigNum operator - (const BigNum&, const BigNum&); + friend BigNum Sub4Div (const BigNum&, const BigNum&); + friend BigNum operator - (const BigNum&, const unsigned long int); + friend BigNum operator * (const BigNum&, const BigNum&); + friend BigNum operator * (const BigNum&, const unsigned long int); + friend BigNum operator / (const BigNum&, const BigNum&); + friend BigNum operator / (const BigNum&, const unsigned long int); + friend BigNum operator % (const BigNum&, const BigNum&); + friend BigNum operator % (const BigNum&, const unsigned long int); + friend BigNum operator ^ (const BigNum&, const BigNum&); + friend BigNum operator ^ (const BigNum&, const unsigned long int); + friend unsigned long int operator & (const BigNum&, const unsigned long int); + friend BigNum operator >> (BigNum&, unsigned long int); + friend BigNum operator << (BigNum&, unsigned long int); + friend BigNum b_div_2exp (const BigNum&, const unsigned long int); + friend BigNum b_pow (const BigNum&, const unsigned long int); + friend BigNum b_powm (const BigNum&, const BigNum&, const BigNum&); + friend BigNum b_powm (const BigNum&, const unsigned int, const BigNum&); + friend BigNum b_abs (const BigNum&); + friend BigNum b_abs2 (const BigNum&); + friend BigNum b_neg (const BigNum&); + friend std::ostream& operator << (std::ostream&, const BigNum&); + + friend bool operator == (const BigNum&, const BigNum&); + friend bool operator == (const BigNum&, const unsigned long int); + friend int b_cmp (const BigNum&, const BigNum&); + friend int b_cmp (const BigNum&, const unsigned long int); + friend int b_cmp (const BigNum&, const signed long int); + + friend unsigned long int SmallerSize (const BigNum&, const BigNum&); + friend unsigned long int BiggerSize (const BigNum&, const BigNum&); + friend int Test (const unsigned long int, int); + friend unsigned long int Set (const unsigned long int, int); + friend unsigned long int Unset (const unsigned long int, int); + friend unsigned long int CeilDiv (unsigned long int, unsigned long int); + friend int GetNumBits (unsigned long int); + + friend int C2I (char c); + +public: + BigNum (); + BigNum (unsigned long int); + BigNum (char*, char s = '+'); + BigNum (const BigNum&); + BigNum& operator= (const BigNum&); + ~BigNum (); + + unsigned long int b_get_ui () const; + unsigned long int Size () const; + unsigned long int* V () const; + char Sign () const; + BigNum EraseLeadingBits (unsigned long int); + unsigned long int GetTotalBits () const; + void b_clear (); + void b_print_w_sign (); + + //private: + unsigned long int *v; + unsigned long int size; + char sign; +}; + +#endif + +#if (__GNUC__ > 3) + +BigNum Set_ui (unsigned long int); +BigNum Set_si (signed long int); + +BigNum operator + (const BigNum &, const BigNum &); +BigNum operator + (const BigNum &, const unsigned long int); +BigNum operator - (const BigNum &, const BigNum &); +BigNum Sub4Div (const BigNum &, const BigNum &); +BigNum operator - (const BigNum &, const unsigned long int); +BigNum operator * (const BigNum &, const BigNum &); +BigNum operator * (const BigNum &, const unsigned long int); +BigNum operator / (const BigNum &, const BigNum &); +BigNum operator / (const BigNum &, const unsigned long int); +BigNum operator % (const BigNum &, const BigNum &); +BigNum operator % (const BigNum &, const unsigned long int); +BigNum operator ^ (const BigNum &, const BigNum &); +BigNum operator ^ (const BigNum &, const unsigned long int); +unsigned long int operator & (const BigNum &,const unsigned long int); +BigNum operator >> (BigNum &, unsigned long int); +BigNum operator << (BigNum &, unsigned long int); +BigNum b_div_2exp (const BigNum &, const unsigned long int); +BigNum b_pow (const BigNum &, const unsigned long int); +BigNum b_powm (const BigNum &, const BigNum &,const BigNum &); +BigNum b_powm (const BigNum &, const unsigned int,const BigNum &); +BigNum b_abs (const BigNum &); +BigNum b_abs2 (const BigNum &); +BigNum b_neg (const BigNum &); +std::ostream & operator << (std::ostream &, const BigNum &); + +bool operator == (const BigNum &, const BigNum &); +bool operator == (const BigNum &, const unsigned long int); +int b_cmp (const BigNum &, const BigNum &); +int b_cmp (const BigNum &, const unsigned long int); +int b_cmp (const BigNum &, const signed long int); + +unsigned long int SmallerSize (const BigNum &,const BigNum &); +unsigned long int BiggerSize (const BigNum &,const BigNum &); +int Test (const unsigned long int, int); +unsigned long int Set (const unsigned long int, int); +unsigned long int Unset (const unsigned long int, int); +unsigned long int CeilDiv (unsigned long int,unsigned long int); +int GetNumBits (unsigned long int); +int C2I (char c); + +#endif + +/*********************************************************************************** + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/SRC/bigrat.cpp sprng5/SRC/bigrat.cpp --- sprng5.orig/SRC/bigrat.cpp 2014-08-25 17:56:49.000000000 +0000 +++ sprng5/SRC/bigrat.cpp 2021-01-15 16:26:38.000000000 +0000 @@ -11,39 +11,38 @@ #include "bigrat.h" -BigRat::BigRat() +BigRat::BigRat () { numerator = 0ul; denominator = 1ul; } -BigNum BigRat::br_get_num() +BigNum BigRat::br_get_num () { return numerator; } -BigNum BigRat::br_get_den() +BigNum BigRat::br_get_den () { return denominator; } -void BigRat::br_set_num(const BigNum & num) +void BigRat::br_set_num (const BigNum &num) { numerator = num; } -void BigRat::br_set_den(const BigNum & den) +void BigRat::br_set_den (const BigNum &den) { denominator = den; } - - -/*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ + +/*********************************************************************************** + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/SRC/bigrat.h sprng5/SRC/bigrat.h --- sprng5.orig/SRC/bigrat.h 2014-08-25 17:56:46.000000000 +0000 +++ sprng5/SRC/bigrat.h 2021-05-18 00:04:03.000000000 +0000 @@ -16,29 +16,27 @@ class BigRat { - public: +public: - BigRat(); + BigRat (); + BigNum br_get_num (); + BigNum br_get_den (); - BigNum br_get_num(); - BigNum br_get_den(); + void br_set_num (const BigNum&); + void br_set_den (const BigNum&); - void br_set_num(const BigNum &); - void br_set_den(const BigNum &); - BigNum numerator; BigNum denominator; }; #endif - - -/*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ + +/*********************************************************************************** + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/SRC/cmrg/Makefile.in sprng5/SRC/cmrg/Makefile.in --- sprng5.orig/SRC/cmrg/Makefile.in 2018-07-21 19:48:26.000000000 +0000 +++ sprng5/SRC/cmrg/Makefile.in 2021-06-08 16:40:20.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -226,6 +226,7 @@ MKDIR_P = @MKDIR_P@ MPICXX = @MPICXX@ MPIF77 = @MPIF77@ +MPI_CXXLIB = @MPI_CXXLIB@ MPI_DEF = @MPI_DEF@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ diff -urN sprng5.orig/SRC/cmrg/cmrg.cpp sprng5/SRC/cmrg/cmrg.cpp --- sprng5.orig/SRC/cmrg/cmrg.cpp 2018-10-22 19:36:18.000000000 +0000 +++ sprng5/SRC/cmrg/cmrg.cpp 2021-03-31 13:40:22.000000000 +0000 @@ -1,14 +1,14 @@ /*************************************************************************/ /*************************************************************************/ /* Parallel Combined Multiple Recursive Generator */ -/* */ +/* */ /* Modifed by: J. Ren */ /* Florida State University */ /* Email: ren@csit.fsu.edu */ /* */ /* Based on the implementation by: */ /* Ashok Srinivasan (version 1, May 25, 1998) */ -/* */ +/* */ /* Note: This generator combines the 64 bit LCG (lcg64) with a 32 bit */ /* multiple recursive generator. */ /*************************************************************************/ @@ -17,7 +17,7 @@ #if __GNUC__ > 3 #include #else - #include +#include #endif #include #include @@ -39,7 +39,7 @@ /*** Name for Generator ***/ #define GENTYPE VERSION "Combined multiple recursive generator" -int MAX_STREAMS = (146138719); /*** Maximum number of independent streams ***/ +int MAX_STREAMS = (146138719); /*** Maximum number of independent streams ***/ #define NPARAMS 3 /*** number of valid parameters ***/ #if LONG_MAX > 2147483647L @@ -63,14 +63,15 @@ #define load_long64array load_longlongarray #endif -unsigned int PARAMLIST[NPARAMS][2] = {{0x87b0b0fdU, 0x27bb2ee6U}, - {0xe78b6955U,0x2c6fe96eU}, - {0x31a53f85U,0x369dea0fU}}; +unsigned int PARAMLIST[NPARAMS][2] = + { + { 0x87b0b0fdU, 0x27bb2ee6U }, + { 0xe78b6955U, 0x2c6fe96eU }, + { 0x31a53f85U, 0x369dea0fU } }; /*************************************************************************/ /* You should not need to look at the next few lines! */ - #define INIT_SEED1 0x2bc6ffffU #define INIT_SEED0 0x8cfe166dU @@ -85,116 +86,122 @@ /* */ /*************************************************************************/ -int NGENS=0; /* number of random streams in current process */ +int NGENS = 0; /* number of random streams in current process */ - /* Initialize random number stream */ /* This function returns 1 if completed sucessuflly, otherwise it */ /* returns 0. */ /* The four parameters are: */ -/* number of distinct streams, stream number, seed, and parameters. */ +/* number of distinct streams, stream number, seed, and parameters. */ -int CMRG::init_rng(int gn, int tg, int s, int p) +int CMRG::init_rng (int gn, int tg, int s, int p) { -/* gives back one stream (node gennum) with updated spawning */ -/* info; should be called total_gen times, with different value */ -/* of gennum in [0,total_gen) each call */ + /* gives back one stream (node gennum) with updated spawning */ + /* info; should be called total_gen times, with different value */ + /* of gennum in [0,total_gen) each call */ int i; double tempdbl; if (tg <= 0) /* Is total_gen valid ? */ { tg = 1; - fprintf(stderr,"WARNING - init_rng: Total_gen <= 0. Default value of 1 used for total_gen\n"); + fprintf (stderr, + "WARNING - init_rng: Total_gen <= 0. Default value of 1 used for total_gen\n"); } if (gn >= MAX_STREAMS) /* check if gen_num is valid */ - fprintf(stderr,"WARNING - init_rng: gennum: %d > maximum number of independent streams: %d\n\tIndependence of streams cannot be guranteed.\n", gn, MAX_STREAMS); + fprintf (stderr, + "WARNING - init_rng: gennum: %d > maximum number of independent streams: %d\n\tIndependence of streams cannot be guranteed.\n", + gn, MAX_STREAMS); if (gn < 0 || gn >= tg) /* check if gen_num is valid */ { - fprintf(stderr,"ERROR - init_rng: gennum %d out of range [%d,%d).\n", gn, 0, tg); + fprintf (stderr, "ERROR - init_rng: gennum %d out of range [%d,%d).\n", + gn, 0, tg); return 0; } - if (p < 0 || p >= NPARAMS) /* check if parameter is valid */ + if (p < 0 || p >= NPARAMS) /* check if parameter is valid */ { - fprintf(stderr,"WARNING - init_rng: parameter not valid. Using Default parameter.\n"); + fprintf (stderr, + "WARNING - init_rng: parameter not valid. Using Default parameter.\n"); p = 0; } /* check if memory allocated for object */ - if ((CMRG *) mymalloc(1*sizeof(CMRG)) == NULL) + if ((CMRG*) mymalloc(1 * sizeof(CMRG)) == NULL) return 0; - + /* Initiallize data structure variables */ rng_type = SPRNG_CMRG; - gentype = (char *)GENTYPE; + gentype = (char*) GENTYPE; stream_number = gn; nstreams = tg; - init_seed = s & 0x7fffffff; /* Only 31 LSB of seed considered */ + init_seed = s & 0x7fffffff; /* Only 31 LSB of seed considered */ parameter = p; spawn_offset = tg; - + /*** Change the next line depending on your generators data needs ***/ - narrays = 0; /* number of arrays needed by your generator */ + narrays = 0; /* number of arrays needed by your generator */ - if(narrays > 0) - { + if (narrays > 0) + { array_sizes = new int[narrays]; - arrays = new int * [narrays]; + arrays = new int*[narrays]; - if(array_sizes == NULL || arrays == NULL) + if (array_sizes == NULL || arrays == NULL) return 0; } - else + else { array_sizes = NULL; arrays = NULL; } - + /*** Change the next line depending on your generators data needs ***/ - /* initiallize ...array_sizes to the sizes of the arrays */ + /* initiallize ...array_sizes to the sizes of the arrays */ - for(i=0; i>22 | (PARAMLIST[p][1]&0xfff)<<10); - multiplier[2] = (double) (PARAMLIST[p][1]>>12); - state[0] = (double) ((INIT_SEED0^gn)&0x3fffff); - state[1] = (double) ((INIT_SEED0^gn)>>22 | ((INIT_SEED1 ^ (unsigned)s<<1)&0xfff)<<10); - state[2] = (double) ((INIT_SEED1 ^ (unsigned)s<<1)>>12); + multiplier[0] = (double) (PARAMLIST[p][0] & 0x3fffff); + multiplier[1] = (double) (PARAMLIST[p][0] >> 22 + | (PARAMLIST[p][1] & 0xfff) << 10); + multiplier[2] = (double) (PARAMLIST[p][1] >> 12); + state[0] = (double) ((INIT_SEED0 ^ gn) & 0x3fffff); + state[1] = (double) ((INIT_SEED0 ^ gn) >> 22 + | ((INIT_SEED1 ^ (unsigned) s << 1) & 0xfff) << 10); + state[2] = (double) ((INIT_SEED1 ^ (unsigned) s << 1) >> 12); #endif - s0 = s1 = s2 = s3 = s4 = /*0xfffffff*/ 0x1; + s0 = s1 = s2 = s3 = s4 = /*0xfffffff*/0x1; - for(i=0; i<127*stream_number; i++) - tempdbl = get_rn_dbl(); - - NGENS++; /* NGENS = # of streams */ + for (i = 0; i < 127 * stream_number; i++) + tempdbl = get_rn_dbl (); + NGENS++; /* NGENS = # of streams */ + return 1; -} +} -CMRG::CMRG() +CMRG::CMRG () { - rng_type = 3; + rng_type = 3; gentype = NULL; stream_number = 0; nstreams = 0; @@ -213,17 +220,17 @@ #else state[0] = state[1] = state[2] = 0; multiplier[0] = multiplier[1] = multiplier[2] = 0; - s0 = s1 = s2 = s3 = s4 = 0; + s0 = s1 = s2 = s3 = s4 = 0; #endif } -CMRG::~CMRG() +CMRG::~CMRG () { - free_rng(); + free_rng (); } -CMRG::CMRG(const CMRG & c) +CMRG::CMRG (const CMRG &c) { rng_type = c.rng_type; gentype = c.gentype; @@ -260,76 +267,80 @@ #endif } -CMRG & CMRG::operator= (const CMRG & c) +CMRG& CMRG::operator= (const CMRG &c) { - if (this != &c) { - this->free_rng(); + if (this != &c) + { + this->free_rng (); - rng_type = c.rng_type; - gentype = c.gentype; - stream_number = c.stream_number; - nstreams = c.nstreams; - init_seed = c.init_seed; - parameter = c.parameter; - narrays = c.narrays; - array_sizes = c.array_sizes; - arrays = c.arrays; - spawn_offset = c.spawn_offset; - prime = c.prime; + rng_type = c.rng_type; + gentype = c.gentype; + stream_number = c.stream_number; + nstreams = c.nstreams; + init_seed = c.init_seed; + parameter = c.parameter; + narrays = c.narrays; + array_sizes = c.array_sizes; + arrays = c.arrays; + spawn_offset = c.spawn_offset; + prime = c.prime; #ifdef LONG64 - state = c.state; - multiplier = c.multiplier; - s0 = c.s0; - s1 = c.s1; - s2 = c.s2; - s3 = c.s3; - s4 = c.s4; + state = c.state; + multiplier = c.multiplier; + s0 = c.s0; + s1 = c.s1; + s2 = c.s2; + s3 = c.s3; + s4 = c.s4; #else - state[0] = c.state[0]; - state[1] = c.state[1]; - state[2] = c.state[2]; - multiplier[0] = c.multiplier[0]; - multiplier[1] = c.multiplier[1]; - multiplier[2] = c.multiplier[2]; - s0 = c.s0; - s1 = c.s1; - s2 = c.s2; - s3 = c.s3; - s4 = c.s4; + state[0] = c.state[0]; + state[1] = c.state[1]; + state[2] = c.state[2]; + multiplier[0] = c.multiplier[0]; + multiplier[1] = c.multiplier[1]; + multiplier[2] = c.multiplier[2]; + s0 = c.s0; + s1 = c.s1; + s2 = c.s2; + s3 = c.s3; + s4 = c.s4; #endif } return *this; } -void CMRG::advance_state() { +/* Multiplies state by multiplier, adds prime */ +void CMRG::advance_state () +{ #ifdef LONG64 state = state*multiplier + prime; #else double t0, t1, t2, t3, st0, st1, st2; - t0 = state[0]*multiplier[0] + prime; - t1 = (double) (int) (t0*TWO_M22); - st0 = t0 - TWO_P22*t1; - assert( (int) st0 == st0); - t1 += state[1]*multiplier[0] + state[0]*multiplier[1]; - t2 = (double) (int) (t1*TWO_M22); - st1 = t1 - TWO_P22*t2; - assert( (int) st1 == st1); - t2 += state[2]*multiplier[0] + state[1]*multiplier[1] + state[0]*multiplier[2]; - t3 = (double) (int) (t2*TWO_M20); - st2 = t2 - TWO_P20*t3; - assert( (int) st2 == st2); - state[0] = st0; - state[1] = st1; + t0 = state[0] * multiplier[0] + prime; + t1 = (double) (int) (t0 * TWO_M22); + st0 = t0 - TWO_P22 * t1; + assert ((int) st0 == st0); + t1 += state[1] * multiplier[0] + state[0] * multiplier[1]; + t2 = (double) (int) (t1 * TWO_M22); + st1 = t1 - TWO_P22 * t2; + assert ((int) st1 == st1); + t2 += state[2] * multiplier[0] + state[1] * multiplier[1] + + state[0] * multiplier[2]; + t3 = (double) (int) (t2 * TWO_M20); + st2 = t2 - TWO_P20 * t3; + assert ((int) st2 == st2); + state[0] = st0; + state[1] = st1; state[2] = st2; #endif } - + /* The Combined Multiple Recusive Generator is defined by */ /* z(n) = x(n) + y(n) * 2^32 (mod 2^64), where */ /* x(n) = the sequenced genreated by LCG64 */ -/* y(n) = 107374183 * y(n-1) + 104480 * y(n-5) (mod 2147483647) */ +/* y(n) = 107374183 * y(n-1) + 104480 * y(n-5) (mod 2147483647) */ #define m1 2147483647 #define a0 107374182 /* first multiplier in y(n) */ @@ -339,7 +350,8 @@ #define r0 7 #define r4 1727 -void CMRG::advance_cmrg() { +void CMRG::advance_cmrg () +{ #ifdef LONG64 unsigned LONG64 p; advance_state(); @@ -349,18 +361,28 @@ s4=s3; s3=s2; s2=s1; s1=s0; s0=p; #else int h, p0, p4; - advance_state(); - h=s4/q4;p4=a4*(s4-h*q4)-h*r4; - s4=s3;s3=s2;s2=s1;s1=s0; - h=s0/q0; p0=a0*(s0-h*q0)-h*r0; - if(p0<0) p0+=m1; if(p4>0)p4-=m1; - s0=p0+p4; if(s0<0) s0+=m1; + advance_state (); + h = s4 / q4; + p4 = a4 * (s4 - h * q4) - h * r4; + s4 = s3; + s3 = s2; + s2 = s1; + s1 = s0; + h = s0 / q0; + p0 = a0 * (s0 - h * q0) - h * r0; + if (p0 < 0) + p0 += m1; + if (p4 > 0) + p4 -= m1; + s0 = p0 + p4; + if (s0 < 0) + s0 += m1; #endif } /* Returns a double precision random number */ -double CMRG::get_rn_dbl() +double CMRG::get_rn_dbl () { #ifdef LONG64 #ifdef _LONG_LONG @@ -393,53 +415,50 @@ #define LSB (1-MSB) double ans; unsigned int ist0, ist1, ist2, tempi, tempi2; - static double temp[1] = {0.0}; + static double temp[1] = { 0.0 }; - advance_cmrg(); - ist0 = static_cast(state[0]); - ist1 = static_cast(state[1]); - ist2 = static_cast(state[2]); - tempi2 = ist2<<12 | ist1>>10; - tempi = (s0+tempi2)&0xffffffff; /* add modulo 2^64 */ - ist1 = (ist1&0x3ff) | (tempi&0xfff)<<10; - ist2 = tempi>>12; + advance_cmrg (); + ist0 = static_cast (state[0]); + ist1 = static_cast (state[1]); + ist2 = static_cast (state[2]); + tempi2 = ist2 << 12 | ist1 >> 10; + tempi = (s0 + tempi2) & 0xffffffff; /* add modulo 2^64 */ + ist1 = (ist1 & 0x3ff) | (tempi & 0xfff) << 10; + ist2 = tempi >> 12; #if defined(HP) || defined(SUN) || defined(SOLARIS) || defined(GENERIC) -/*IEEE mantissa is 52 bits. */ - ((unsigned int *)temp)[LSB] = (ist1<<10 | ist0>>12); - ((unsigned int *)temp)[MSB] = EXPO | ist2; + /*IEEE mantissa is 52 bits. */ + ((unsigned int *)temp)[LSB] = (ist1<<10 | ist0>>12); + ((unsigned int *)temp)[MSB] = EXPO | ist2; return *temp - (double) 1.0; #else - return ist2*TWO_M20 + ist1*TWO_M42 + ist0*TWO_M64; + return ist2 * TWO_M20 + ist1 * TWO_M42 + ist0 * TWO_M64; #endif #endif -} +} - /* Return a random integer */ - -int CMRG::get_rn_int() +int CMRG::get_rn_int () { #ifdef LONG64 advance_cmrg(); return ((state+(s0<<32))&MULT_MASK)>>33; #else - return (int) (get_rn_dbl()*0x80000000U); + return (int) (get_rn_dbl () * 0x80000000U); #endif -} +} - /* Return a single precision random number */ -float CMRG::get_rn_flt() +float CMRG::get_rn_flt () { /* If you have a more efficient way of computing the random integer, - then please replace the statement below with your scheme. */ + then please replace the statement below with your scheme. */ - return (float) get_rn_dbl(); + return (float) get_rn_dbl (); } #undef m1 @@ -450,82 +469,78 @@ #undef r0 #undef r4 - - - /*************************************************************************/ /*************************************************************************/ /* SPAWN_RNG: spawns new generators */ /*************************************************************************/ /*************************************************************************/ -int CMRG::spawn_rng(int nspawned, Sprng ***newgens) +int CMRG::spawn_rng (int nspawned, Sprng ***newgens) { - CMRG ** genptr; + CMRG **genptr; int i, j; - + if (nspawned <= 0) /* is nspawned valid ? */ { nspawned = 1; - fprintf(stderr,"WARNING - spawn_rng: nspawned <= 0. Default value of 1 used for nspawned\n"); + fprintf (stderr, + "WARNING - spawn_rng: nspawned <= 0. Default value of 1 used for nspawned\n"); } - + // genptr = (CMRG **) mymalloc(nspawned*sizeof(CMRG *)); - genptr = new CMRG * [nspawned]; + genptr = new CMRG*[nspawned]; - if(genptr == NULL) /* allocate memory for pointers to structures */ + if (genptr == NULL) /* allocate memory for pointers to structures */ { *newgens = NULL; return 0; } - - for(i=0; i MAX_STREAMS) /* change seed to avoid repeating sequence */ - s = (init_seed)^gn; + + gn = stream_number + spawn_offset * (i + 1); + + if (gn > MAX_STREAMS) /* change seed to avoid repeating sequence */ + s = (init_seed) ^ gn; else s = init_seed; - + /* Initialize a stream. This stream has incorrect spawning information. - But we will correct it below. */ + But we will correct it below. */ genptr[i] = new CMRG; - genptr[i]->init_rng(gn, gn+1, s, parameter); - - if(genptr[i] == NULL) /* Was generator initiallized? */ - { - nspawned = i; - break; - } - genptr[i]->spawn_offset = (nspawned+1)*spawn_offset; + genptr[i]->init_rng (gn, gn + 1, s, parameter); + + if (genptr[i] == NULL) /* Was generator initiallized? */ + { + nspawned = i; + break; + } + genptr[i]->spawn_offset = (nspawned + 1) * spawn_offset; } - - spawn_offset *= (nspawned+1); - *newgens = (Sprng **) genptr; - + + spawn_offset *= (nspawned + 1); + *newgens = (Sprng**) genptr; + return nspawned; } - /* Free memory allocated for data structure associated with stream */ - -int CMRG::free_rng() +int CMRG::free_rng () { int i; - assert(this != NULL); - - for(i=0; i 0) + for (i = 0; i < narrays; i++) + delete[] arrays[i]; + + if (narrays > 0) { - delete [] array_sizes; - delete [] arrays; + delete[] array_sizes; + delete[] arrays; } // free(this); @@ -534,33 +549,32 @@ return NGENS; } - -int CMRG::pack_rng(char **buffer) +/* Put RNG into buffer */ +int CMRG::pack_rng (char **buffer) { unsigned char *p, *initp; int size, i; unsigned int temp, m[2]; - size = 4 + 64 + 4;//strlen(gentype)+1; - - initp = p = (unsigned char *) mymalloc(size); /* allocate memory */ + size = 4 + 64 + 4; //strlen(gentype)+1; + + initp = p = (unsigned char*) mymalloc(size); /* allocate memory */ /* The new load/store routines make using sizeof unnecessary. Infact, */ /* using sizeof could be erroneous. */ - if(p == NULL) + if (p == NULL) { *buffer = NULL; return 0; } - - - p += store_int(rng_type,4,p); - p += store_int(stream_number,4,p); - p += store_int(nstreams,4,p); - p += store_int(init_seed,4,p); - p += store_int(parameter,4,p); - p += store_int(narrays,4,p); - p += store_int(spawn_offset,4,p); - p += store_int(prime,4,p); + + p += store_int (rng_type, 4, p); + p += store_int (stream_number, 4, p); + p += store_int (nstreams, 4, p); + p += store_int (init_seed, 4, p); + p += store_int (parameter, 4, p); + p += store_int (narrays, 4, p); + p += store_int (spawn_offset, 4, p); + p += store_int (prime, 4, p); #ifdef LONG64 /* 64 bit integer types */ p += store_long64(state,8,p); p += store_long64(multiplier,8,p); @@ -570,60 +584,57 @@ p += store_long64(s3,4,p); p += store_long64(s4,4,p); #else /* No 64 bit type available */ - m[0] = static_cast(state[2]); - temp = static_cast(state[1]); - m[0]=(m[0]<<12)|(temp>>10); - m[1] = static_cast(state[1]); - temp = static_cast(state[0]); - m[1]=(m[1]<<22)|(temp); - p += store_intarray(m,2,4,p); - m[0] = static_cast(multiplier[2]); - temp = static_cast(multiplier[1]); - m[0]=(m[0]<<12)|(temp>>10); - m[1] = static_cast(multiplier[1]); - temp = static_cast(multiplier[0]); - m[1]=(m[1]<<22)|(temp); - p += store_intarray(m,2,4,p); - p += store_int(*(unsigned int *)&s0,4,p); - p += store_int(*(unsigned int *)&s1,4,p); - p += store_int(*(unsigned int *)&s2,4,p); - p += store_int(*(unsigned int *)&s3,4,p); - p += store_int(*(unsigned int *)&s4,4,p); + m[0] = static_cast (state[2]); + temp = static_cast (state[1]); + m[0] = (m[0] << 12) | (temp >> 10); + m[1] = static_cast (state[1]); + temp = static_cast (state[0]); + m[1] = (m[1] << 22) | (temp); + p += store_intarray (m, 2, 4, p); + m[0] = static_cast (multiplier[2]); + temp = static_cast (multiplier[1]); + m[0] = (m[0] << 12) | (temp >> 10); + m[1] = static_cast (multiplier[1]); + temp = static_cast (multiplier[0]); + m[1] = (m[1] << 22) | (temp); + p += store_intarray (m, 2, 4, p); + p += store_int (*(unsigned int*) &s0, 4, p); + p += store_int (*(unsigned int*) &s1, 4, p); + p += store_int (*(unsigned int*) &s2, 4, p); + p += store_int (*(unsigned int*) &s3, 4, p); + p += store_int (*(unsigned int*) &s4, 4, p); #endif - - - *buffer = (char *) initp; - assert(p-initp == size); - return p-initp; + + *buffer = (char*) initp; + assert (p - initp == size); + return p - initp; } - -int CMRG::unpack_rng(char *packed) +/* Get RNG From buffer */ +int CMRG::unpack_rng (char *packed) { unsigned int i, m[2]; unsigned char *p; - p = (unsigned char *) packed; + p = (unsigned char*) packed; - /*if(this == NULL) { - return 0; - }*/ + p += load_int (p, 4, (unsigned int*) &rng_type); - p += load_int(p,4,(unsigned int *)&rng_type); + if (rng_type != SPRNG_CMRG) + { + fprintf (stderr, "ERROR: Unpacked ' %d ' instead of ' %d '\n", rng_type, + SPRNG_CMRG); + return 0; + } - if (rng_type != SPRNG_CMRG) { - fprintf(stderr,"ERROR: Unpacked ' %d ' instead of ' %d '\n", rng_type, SPRNG_CMRG); - return 0; - } - - p += load_int(p,4,(unsigned int *)&stream_number); - p += load_int(p,4,(unsigned int *)&nstreams); - p += load_int(p,4,(unsigned int *)&init_seed); - p += load_int(p,4,(unsigned int *)¶meter); - p += load_int(p,4,(unsigned int *)&narrays); - p += load_int(p,4,(unsigned int *)&spawn_offset); - p += load_int(p,4,&prime); + p += load_int (p, 4, (unsigned int*) &stream_number); + p += load_int (p, 4, (unsigned int*) &nstreams); + p += load_int (p, 4, (unsigned int*) &init_seed); + p += load_int (p, 4, (unsigned int*) ¶meter); + p += load_int (p, 4, (unsigned int*) &narrays); + p += load_int (p, 4, (unsigned int*) &spawn_offset); + p += load_int (p, 4, &prime); #ifdef LONG64 /* 64 bit integer types */ p += load_long64(p,8,&state); p += load_long64(p,8,&multiplier); @@ -633,55 +644,49 @@ p += load_long64(p,4,&s3); p += load_long64(p,4,&s4); #else /* No 64 bit type available */ - p += load_intarray(p,2,4,m); - state[0] = (double) (m[1]&0x3fffff); - state[1] = (double) ((m[1]>>22) | (m[0]&0xfff)<<10); - state[2] = (double) (m[0]>>12); - p += load_intarray(p,2,4,m); - multiplier[0] = (double) (m[1]&0x3fffff); - multiplier[1] = (double) ((m[1]>>22) | (m[0]&0xfff)<<10); - multiplier[2] = (double) (m[0]>>12); - p += load_int(p,4,(unsigned int *)&s0); - p += load_int(p,4,(unsigned int *)&s1); - p += load_int(p,4,(unsigned int *)&s2); - p += load_int(p,4,(unsigned int *)&s3); - p += load_int(p,4,(unsigned int *)&s4); + p += load_intarray (p, 2, 4, m); + state[0] = (double) (m[1] & 0x3fffff); + state[1] = (double) ((m[1] >> 22) | (m[0] & 0xfff) << 10); + state[2] = (double) (m[0] >> 12); + p += load_intarray (p, 2, 4, m); + multiplier[0] = (double) (m[1] & 0x3fffff); + multiplier[1] = (double) ((m[1] >> 22) | (m[0] & 0xfff) << 10); + multiplier[2] = (double) (m[0] >> 12); + p += load_int (p, 4, (unsigned int*) &s0); + p += load_int (p, 4, (unsigned int*) &s1); + p += load_int (p, 4, (unsigned int*) &s2); + p += load_int (p, 4, (unsigned int*) &s3); + p += load_int (p, 4, (unsigned int*) &s4); #endif - array_sizes = NULL; arrays = NULL; - + NGENS++; return 1; } - -int CMRG::get_seed_rng() +int CMRG::get_seed_rng () { return init_seed; } - - -int CMRG::print_rng() +int CMRG::print_rng () { - printf("\n%s\n", GENTYPE+2); - printf("\n \tseed = %d, stream_number = %d\tparameter = %d\n\n", init_seed, stream_number, parameter); + printf ("\n%s\n", GENTYPE + 2); + printf ("\n \tseed = %d, stream_number = %d\tparameter = %d\n\n", init_seed, + stream_number, parameter); return 1; } - - - /*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/SRC/cmrg/cmrg.h sprng5/SRC/cmrg/cmrg.h --- sprng5.orig/SRC/cmrg/cmrg.h 2014-08-25 17:57:30.000000000 +0000 +++ sprng5/SRC/cmrg/cmrg.h 2021-01-15 16:35:53.000000000 +0000 @@ -1,62 +1,62 @@ #ifndef _cmrg_h #define _cmrg_h -extern "C" { -class CMRG : public Sprng +extern "C" { - public: - - int init_rng (int, int, int, int); - CMRG(); - ~CMRG(); - CMRG (const CMRG &); - CMRG & operator= (const CMRG &); + class CMRG : public Sprng + { + public: - int get_rn_int (); - float get_rn_flt(); - double get_rn_dbl (); - int spawn_rng (int, Sprng ***); - int get_seed_rng (); - int free_rng (); - int pack_rng (char **); - int unpack_rng (char *); - int print_rng (); + int init_rng (int, int, int, int); + CMRG (); + ~CMRG (); + CMRG (const CMRG&); + CMRG& operator= (const CMRG&); - private: - int rng_type; - char *gentype; - int stream_number; - int nstreams; - int init_seed; - int parameter; - int narrays; - int *array_sizes; - int **arrays; - int spawn_offset; - /*** declare other variables here ***/ - unsigned int prime; + int get_rn_int (); + float get_rn_flt (); + double get_rn_dbl (); + int spawn_rng (int, Sprng***); + int get_seed_rng (); + int free_rng (); + int pack_rng (char**); + int unpack_rng (char*); + int print_rng (); + + private: + int rng_type; + char *gentype; + int stream_number; + int nstreams; + int init_seed; + int parameter; + int narrays; + int *array_sizes; + int **arrays; + int spawn_offset; + /*** declare other variables here ***/ + unsigned int prime; #ifdef LONG64 /* 64 bit integer types */ unsigned LONG64 state, multiplier; unsigned LONG64 s0, s1, s2, s3, s4; #else /* No 64 bit type available, so use array of floats */ - double state[3], multiplier[3];/* simulate 64 bit arithmetic */ - int s0, s1, s2, s3, s4; + double state[3], multiplier[3];/* simulate 64 bit arithmetic */ + int s0, s1, s2, s3, s4; #endif - inline void advance_state(); - inline void advance_cmrg(); -}; + inline void advance_state (); + inline void advance_cmrg (); + }; } #endif - - -/*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ + +/*********************************************************************************** + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/SRC/communicate.cpp sprng5/SRC/communicate.cpp --- sprng5.orig/SRC/communicate.cpp 2014-08-25 17:56:49.000000000 +0000 +++ sprng5/SRC/communicate.cpp 2021-05-25 14:54:16.000000000 +0000 @@ -1,64 +1,54 @@ #ifdef SPRNG_MPI #include #endif - #include "sprng.h" #include - using namespace std; -void get_proc_info_mpi(int *myid, int *nprocs) +void get_proc_info_mpi (int *myid, int *nprocs) { -#ifdef SPRNG_MPI + #ifdef SPRNG_MPI MPI_Comm_rank(MPI_COMM_WORLD, myid); MPI_Comm_size(MPI_COMM_WORLD, nprocs); -#else + #else *myid = 0; - *nprocs = 1; -#endif +*nprocs = 1; + #endif } -int make_new_seed_mpi(void) +int make_new_seed_mpi (void) { -#ifdef SPRNG_MPI + #ifdef SPRNG_MPI unsigned int temp2; int myid, nprocs; MPI_Comm newcomm; - MPI_Comm_dup(MPI_COMM_WORLD, &newcomm); /* create a temporary communicator */ - MPI_Comm_rank(newcomm, &myid); MPI_Comm_size(newcomm, &nprocs); - if(myid == 0) - temp2 = make_new_seed(); - + temp2 = make_new_seed(); MPI_Bcast(&temp2,1,MPI_UNSIGNED,0,newcomm); - MPI_Comm_free(&newcomm); - - return temp2; -#else - return make_new_seed(); -#endif + return temp2; + #else + return make_new_seed (); + #endif } - #if 0 main() { - printf("%u\n", make_new_seed()); - printf("%u\n", make_new_seed()); + printf("%u\n", make_new_seed()); + printf("%u\n", make_new_seed()); } #endif - - -/*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ + +/*********************************************************************************** + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/SRC/communicate.cpp.c sprng5/SRC/communicate.cpp.c --- sprng5.orig/SRC/communicate.cpp.c 2006-10-03 01:51:18.000000000 +0000 +++ sprng5/SRC/communicate.cpp.c 2021-05-10 12:46:32.000000000 +0000 @@ -7,42 +7,41 @@ using namespace std; -void get_proc_info_mpi(int *myid, int *nprocs) +void get_proc_info_mpi (int *myid, int *nprocs) { -#ifdef SPRNG_MPI - MPI_Comm_rank(MPI_COMM_WORLD, myid); - MPI_Comm_size(MPI_COMM_WORLD, nprocs); -#else - *myid = 0; - *nprocs = 1; -#endif + #ifdef SPRNG_MPI + MPI_Comm_rank(MPI_COMM_WORLD, myid); + MPI_Comm_size(MPI_COMM_WORLD, nprocs); + #else + *myid = 0; + *nprocs = 1; + #endif } -int make_new_seed_mpi(void) +int make_new_seed_mpi (void) { -#ifdef SPRNG_MPI - unsigned int temp2; - int myid, nprocs; - MPI_Comm newcomm; + #ifdef SPRNG_MPI + unsigned int temp2; + int myid, nprocs; + MPI_Comm newcomm; - MPI_Comm_dup(MPI_COMM_WORLD, &newcomm); /* create a temporary communicator */ + MPI_Comm_dup(MPI_COMM_WORLD, &newcomm); /* create a temporary communicator */ - MPI_Comm_rank(newcomm, &myid); - MPI_Comm_size(newcomm, &nprocs); + MPI_Comm_rank(newcomm, &myid); + MPI_Comm_size(newcomm, &nprocs); - if(myid == 0) + if(myid == 0) temp2 = make_new_seed(); - MPI_Bcast(&temp2,1,MPI_UNSIGNED,0,newcomm); + MPI_Bcast(&temp2,1,MPI_UNSIGNED,0,newcomm); - MPI_Comm_free(&newcomm); + MPI_Comm_free(&newcomm); return temp2; -#else - return make_new_seed(); -#endif + #else + return make_new_seed (); + #endif } - #if 0 main() diff -urN sprng5.orig/SRC/communicate.h sprng5/SRC/communicate.h --- sprng5.orig/SRC/communicate.h 2014-08-25 17:56:46.000000000 +0000 +++ sprng5/SRC/communicate.h 2021-01-15 16:26:38.000000000 +0000 @@ -1,14 +1,12 @@ -extern void get_proc_info_mpi(int *myid, int *nprocs); -extern int make_new_seed_mpi(void); +extern void get_proc_info_mpi (int *myid, int *nprocs); +extern int make_new_seed_mpi (void); - - -/*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ +/*********************************************************************************** + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/SRC/cputime.cpp sprng5/SRC/cputime.cpp --- sprng5.orig/SRC/cputime.cpp 2014-08-25 17:56:49.000000000 +0000 +++ sprng5/SRC/cputime.cpp 2021-05-18 00:04:03.000000000 +0000 @@ -1,48 +1,38 @@ #include -#include -#include +#include +#include #include "fwrap.h" - using namespace std; - -double cputime(void) +double cputime (void) { - double current_time; + double current_time; -#ifdef RUSAGE_SELF + #ifdef RUSAGE_SELF struct rusage temp; - getrusage(RUSAGE_SELF, &temp); - current_time = (temp.ru_utime.tv_sec + temp.ru_stime.tv_sec + 1.0e-6*(temp.ru_utime.tv_usec + temp.ru_stime.tv_usec)); - -#elif defined(CLOCKS_PER_SEC) + #elif defined(CLOCKS_PER_SEC) current_time = clock()/((double) CLOCKS_PER_SEC); - -#else - fprintf(stderr,"\nERROR: Timing routines not available\n\n"); - current_time = 0.0; -#endif - - return (current_time); + #else + fprintf (stderr, "\nERROR: Timing routines not available\n\n"); + current_time = 0.0; + #endif + return (current_time); } - -double FNAMEOF_fcpu_t(void) +double FNAMEOF_fcpu_t (void) { - return cputime(); + return cputime (); } - - -/*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ +/*********************************************************************************** + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/SRC/cputime.h sprng5/SRC/cputime.h --- sprng5.orig/SRC/cputime.h 2014-08-25 17:56:46.000000000 +0000 +++ sprng5/SRC/cputime.h 2021-01-15 16:28:24.000000000 +0000 @@ -1,13 +1,11 @@ -double cputime(void); +double cputime (void); - - -/*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ +/*********************************************************************************** + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/SRC/drand.cpp sprng5/SRC/drand.cpp --- sprng5.orig/SRC/drand.cpp 2014-08-25 17:56:49.000000000 +0000 +++ sprng5/SRC/drand.cpp 2021-05-25 14:54:16.000000000 +0000 @@ -1,50 +1,37 @@ #include #include #include "cputime.h" - using namespace std; - #define TIMING_TRIAL_SIZE 1000000 -int main() +int main () { - int i; - double temp1, temp2, rn; - double temp_mult = TIMING_TRIAL_SIZE/1.0e6; - - temp1 = cputime(); - - for(i=0; i %8.4f MRS\n", - temp2-temp1, temp_mult/(temp2-temp1)); - putchar('\n'); - - return 0; + int i; + double temp1, temp2, rn; + double temp_mult = TIMING_TRIAL_SIZE / 1.0e6; + temp1 = cputime (); + for (i = 0; i < TIMING_TRIAL_SIZE; i++) + rn = drand48 (); + temp2 = cputime (); + if (temp2 - temp1 < 1.0e-15) + { + printf ("Timing Information not available/not accurate enough.\n\t...Exiting\n"); + exit (1); + } + /* The next line is just used to ensure that the optimization does not remove the call to the RNG. Nothing is really printed.*/ + fprintf (stderr, "Last random number generated\n", rn); + printf ("\nUser + System time Information (Note: MRS = Million Random Numbers Per Second)\n"); + printf ("\tDRAND48:\t Time = %7.3f seconds => %8.4f MRS\n", temp2 - temp1,temp_mult / (temp2 - temp1)); + putchar ('\n'); + return 0; } - - -/*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ +/*********************************************************************************** + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/SRC/fwrap.cpp sprng5/SRC/fwrap.cpp --- sprng5.orig/SRC/fwrap.cpp 2014-08-25 17:56:49.000000000 +0000 +++ sprng5/SRC/fwrap.cpp 2021-05-25 14:54:16.000000000 +0000 @@ -18,16 +18,14 @@ extern "C" { - #include "fwrap.h" +#include "fwrap.h" } - #include "sprng_cpp.h" #include "memory.h" - #if __GNUC__ > 3 #include #else - #include +#include #endif #include #include @@ -35,252 +33,218 @@ #include #include - extern "C" { - int fget_seed_rng_F77(int **genptr); - int ffree_rng_F77(int **genptr); - int fmake_new_seed_F77(void); - int * finit_rng_sim_F77(int *seed, int *mult, int *gtype = 0); - int * finit_rng_F77(int * rng_type, int *gennum, int *total_gen, int *seed, int *length); - int fspawn_rng_F77(int **genptr, int *nspawned, int **newGen); - int fget_rn_int_sim_F77(void); - int fget_rn_int_F77(int **genptr); - float fget_rn_flt_sim_F77(void); - float fget_rn_flt_F77(int **genptr); - double fget_rn_dbl_sim_F77(void); - double fget_rn_dbl_F77(int **genptr); - int fpack_rng_F77(int **genptr, char *buffer); - int fpack_rng_simple_F77(char *buffer); - int * funpack_rng_F77(char *buffer, int *rng_type); - int * funpack_rng_simple_F77(char *buffer, int *rng_type); - int fprint_rng_F77( int **genptr); - int fprint_rng_simple_F77(void); - int fseed_mpi_F77(void); - - int * finit_rng_simmpi_F77(int *seed, int *mult, int * rng_type); - int fget_rn_int_simmpi_F77(void); - float fget_rn_flt_simmpi_F77(void); - double fget_rn_dbl_simmpi_F77(void); - - double fcpu_t_F77(void); + int fget_seed_rng_F77 (int **genptr); + int ffree_rng_F77 (int **genptr); + int fmake_new_seed_F77 (void); + int* finit_rng_sim_F77 (int *seed, int *mult, int *gtype = 0); + int* finit_rng_F77 (int *rng_type, int *gennum, int *total_gen, int *seed,int *length); + int fspawn_rng_F77 (int **genptr, int *nspawned, int **newGen); + int fget_rn_int_sim_F77 (void); + int fget_rn_int_F77 (int **genptr); + float fget_rn_flt_sim_F77 (void); + float fget_rn_flt_F77 (int **genptr); + double fget_rn_dbl_sim_F77 (void); + double fget_rn_dbl_F77 (int **genptr); + int fpack_rng_F77 (int **genptr, char *buffer); + int fpack_rng_simple_F77 (char *buffer); + int* funpack_rng_F77 (char *buffer, int *rng_type); + int* funpack_rng_simple_F77 (char *buffer, int *rng_type); + int fprint_rng_F77 (int **genptr); + int fprint_rng_simple_F77 (void); + int fseed_mpi_F77 (void); + int* finit_rng_simmpi_F77 (int *seed, int *mult, int *rng_type); + int fget_rn_int_simmpi_F77 (void); + float fget_rn_flt_simmpi_F77 (void); + double fget_rn_dbl_simmpi_F77 (void); + double fcpu_t_F77 (void); } - -double fcpu_t_F77(void) +double fcpu_t_F77 (void) { - double current_time; - -#ifdef RUSAGE_SELF + double current_time; + #ifdef RUSAGE_SELF struct rusage temp; - getrusage(RUSAGE_SELF, &temp); - current_time = (temp.ru_utime.tv_sec + temp.ru_stime.tv_sec + - 1.0e-6*(temp.ru_utime.tv_usec + temp.ru_stime.tv_usec)); - -#elif defined(CLOCKS_PER_SEC) - current_time = clock()/((double) CLOCKS_PER_SEC); - -#else - fprintf(stderr,"\nERROR: Timing routines not available\n\n"); - current_time = 0.0; -#endif - + 1.0e-6*(temp.ru_utime.tv_usec + temp.ru_stime.tv_usec)); + #elif defined(CLOCKS_PER_SEC) + current_time = clock()/((double) CLOCKS_PER_SEC); + #else + fprintf (stderr, "\nERROR: Timing routines not available\n\n"); + current_time = 0.0; + #endif return (current_time); } -int fget_seed_rng_F77(int **genptr) +int fget_seed_rng_F77 (int **genptr) { - Sprng * ptr = (Sprng *) *genptr; - - return ptr->get_seed_rng(); + Sprng *ptr = (Sprng*) *genptr; + return ptr->get_seed_rng (); } -int ffree_rng_F77(int **genptr) +int ffree_rng_F77 (int **genptr) { - Sprng * ptr = (Sprng *) *genptr; - - return ptr->free_rng(); + Sprng *ptr = (Sprng*) *genptr; + return ptr->free_rng (); } -int fmake_new_seed_F77(void) +int fmake_new_seed_F77 (void) { - return make_new_seed(); + return make_new_seed (); } -int * finit_rng_sim_F77(int *seed, int *mult, int *gtype) +int* finit_rng_sim_F77 (int *seed, int *mult, int *gtype) { - return init_rng_simple(*seed, *mult, *gtype); + return init_rng_simple (*seed, *mult, *gtype); } -int * finit_rng_F77(int * rng_type, int *gennum, int *total_gen, int *seed, int *length) +int* finit_rng_F77 (int *rng_type, int *gennum, int *total_gen, int *seed, + int *length) { - Sprng * ptr = SelectType(* rng_type); - int status = ptr->init_rng(*gennum, *total_gen, *seed, *length); - + Sprng *ptr = SelectType (*rng_type); + int status = ptr->init_rng (*gennum, *total_gen, *seed, *length); if (status == 1) - return (int *) ptr; + return (int*) ptr; else - return (int *) NULL; + return (int*) NULL; } -int fspawn_rng_F77(int **genptr, int *nspawned, int **newGen) +int fspawn_rng_F77 (int **genptr, int *nspawned, int **newGen) { int i, n; - Sprng ** tmpGen; - Sprng * ptr = (Sprng *) *genptr; - - n = ptr->spawn_rng(*nspawned, &tmpGen); - - for (i=0; i< n; i++) - newGen[i] = (int *) tmpGen[i]; - - if(n != 0) - delete [] tmpGen; - + Sprng **tmpGen; + Sprng *ptr = (Sprng*) *genptr; + n = ptr->spawn_rng (*nspawned, &tmpGen); + for (i = 0; i < n; i++) + newGen[i] = (int*) tmpGen[i]; + if (n != 0) + delete[] tmpGen; return n; } -int fget_rn_int_sim_F77(void) +int fget_rn_int_sim_F77 (void) { - return get_rn_int_simple(); + return get_rn_int_simple (); } -int fget_rn_int_F77(int **genptr) +int fget_rn_int_F77 (int **genptr) { - Sprng * ptr = (Sprng *) *genptr; - - return ptr->get_rn_int(); + Sprng *ptr = (Sprng*) *genptr; + return ptr->get_rn_int (); } -float fget_rn_flt_sim_F77(void) +float fget_rn_flt_sim_F77 (void) { - return get_rn_flt_simple(); + return get_rn_flt_simple (); } -float fget_rn_flt_F77(int **genptr) +float fget_rn_flt_F77 (int **genptr) { - Sprng * ptr = (Sprng *) *genptr; - - return ptr->get_rn_flt(); + Sprng *ptr = (Sprng*) *genptr; + return ptr->get_rn_flt (); } -double fget_rn_dbl_sim_F77(void) +double fget_rn_dbl_sim_F77 (void) { - return get_rn_dbl_simple(); + return get_rn_dbl_simple (); } -double fget_rn_dbl_F77(int **genptr) +double fget_rn_dbl_F77 (int **genptr) { - Sprng * ptr = (Sprng *) *genptr; - - return ptr->get_rn_dbl(); + Sprng *ptr = (Sprng*) *genptr; + return ptr->get_rn_dbl (); } -int fpack_rng_F77(int **genptr, char *buffer) +int fpack_rng_F77 (int **genptr, char *buffer) { int size; char *temp; - Sprng * ptr = (Sprng *) *genptr; - - size = ptr->pack_rng(&temp); - - if(temp != NULL) - { - memcpy(buffer,temp,size); - delete [] temp; - } - + Sprng *ptr = (Sprng*) *genptr; + size = ptr->pack_rng (&temp); + if (temp != NULL) + { + memcpy (buffer, temp, size); + delete[] temp; + } return size; } -int fpack_rng_simple_F77(char *buffer) +int fpack_rng_simple_F77 (char *buffer) { int size; char *temp; - - size = pack_rng_simple(&temp); - - if(temp != NULL) - { - memcpy(buffer,temp,size); - delete [] temp; - } - + size = pack_rng_simple (&temp); + if (temp != NULL) + { + memcpy (buffer, temp, size); + delete[] temp; + } return size; } -int * funpack_rng_F77(char *buffer, int * rng_type) +int* funpack_rng_F77 (char *buffer, int *rng_type) { - Sprng * ptr = SelectType(* rng_type); - int status = ptr->unpack_rng(buffer); - + Sprng *ptr = SelectType (*rng_type); + int status = ptr->unpack_rng (buffer); if (status == 1) - return (int *) ptr; + return (int*) ptr; else - return (int *) NULL; + return (int*) NULL; } -int * funpack_rng_simple_F77(char *buffer, int * rng_type) +int* funpack_rng_simple_F77 (char *buffer, int *rng_type) { - return unpack_rng_simple(buffer, *rng_type); + return unpack_rng_simple (buffer, *rng_type); } -int fprint_rng_F77( int **genptr) +int fprint_rng_F77 (int **genptr) { - Sprng * ptr = (Sprng *) *genptr; - - return ptr->print_rng(); + Sprng *ptr = (Sprng*) *genptr; + return ptr->print_rng (); } -int fprint_rng_simple_F77(void) +int fprint_rng_simple_F77 (void) { - return print_rng_simple(); + return print_rng_simple (); } - - - -int fseed_mpi_F77(void) +int fseed_mpi_F77 (void) { -#ifdef SPRNG_MPI - return make_new_seed_mpi(); -#else - return -1; -#endif + #ifdef SPRNG_MPI + return make_new_seed_mpi(); + #else + return -1; + #endif } - - -int * finit_rng_simmpi_F77(int *seed, int *mult, int *rng_type) +int* finit_rng_simmpi_F77 (int *seed, int *mult, int *rng_type) { - return init_rng_simple_mpi(*seed, *mult, *rng_type); + return init_rng_simple_mpi (*seed, *mult, *rng_type); } -int fget_rn_int_simmpi_F77(void) +int fget_rn_int_simmpi_F77 (void) { - return get_rn_int_simple_mpi(); + return get_rn_int_simple_mpi (); } -float fget_rn_flt_simmpi_F77(void) +float fget_rn_flt_simmpi_F77 (void) { - return get_rn_flt_simple_mpi(); + return get_rn_flt_simple_mpi (); } -double fget_rn_dbl_simmpi_F77(void) +double fget_rn_dbl_simmpi_F77 (void) { - return get_rn_dbl_simple_mpi(); + return get_rn_dbl_simple_mpi (); } - - -/*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ +/*********************************************************************************** + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/SRC/fwrap.h sprng5/SRC/fwrap.h --- sprng5.orig/SRC/fwrap.h 2014-11-24 22:15:13.000000000 +0000 +++ sprng5/SRC/fwrap.h 2021-01-15 16:26:40.000000000 +0000 @@ -18,8 +18,6 @@ /************************************************************************/ /************************************************************************/ - - /* Tests for HAVE_CONFIG_H, which means the configure script has been run properly */ #ifdef HAVE_CONFIG_H /* Including this to use the macros defined during configure script */ @@ -54,14 +52,14 @@ #define fcpu_t_F77 F77_FUNC_(fcpu_t,FCPU_T) #endif -#endif - -/*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ +#endif + +/*********************************************************************************** + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/SRC/info.cpp sprng5/SRC/info.cpp --- sprng5.orig/SRC/info.cpp 2014-08-25 17:56:49.000000000 +0000 +++ sprng5/SRC/info.cpp 2021-05-18 00:04:03.000000000 +0000 @@ -7,37 +7,32 @@ }; /* Values pertain to this particular parameter: 2^61-1 as modulus*/ -struct BIGNUM_ARRAY_TYPE init_factors() +struct BIGNUM_ARRAY_TYPE init_factors () { struct BIGNUM_ARRAY_TYPE factors; - factors.size = 12; factors.list = new BigNum[12]; - - factors.list[0] = (char *)"2"; - factors.list[1] = (char *)"3"; - factors.list[2] = (char *)"5"; - factors.list[3] = (char *)"7"; - factors.list[4] = (char *)"B"; - factors.list[5] = (char *)"D"; - factors.list[6] = (char *)"1F"; - factors.list[7] = (char *)"29"; - factors.list[8] = (char *)"3D"; - factors.list[9] = (char *)"97"; - factors.list[10] = (char *)"14B"; - factors.list[11] = (char *)"529"; - + factors.list[0] = (char*) "2"; + factors.list[1] = (char*) "3"; + factors.list[2] = (char*) "5"; + factors.list[3] = (char*) "7"; + factors.list[4] = (char*) "B"; + factors.list[5] = (char*) "D"; + factors.list[6] = (char*) "1F"; + factors.list[7] = (char*) "29"; + factors.list[8] = (char*) "3D"; + factors.list[9] = (char*) "97"; + factors.list[10] = (char*) "14B"; + factors.list[11] = (char*) "529"; return (factors); } - - -/*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ +/*********************************************************************************** + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/SRC/info.h sprng5/SRC/info.h --- sprng5.orig/SRC/info.h 2014-08-25 17:56:46.000000000 +0000 +++ sprng5/SRC/info.h 2021-05-10 12:46:32.000000000 +0000 @@ -3,7 +3,7 @@ struct BIGNUM_ARRAY_TYPE; #define OP_SIZE 2 -#define RNGBITS 3 +#define RNGBITS 3 #define SHIFT 29 #define MASK 0X1FFFFFFF #define MAGIC_NUM "222222222222222" @@ -12,15 +12,14 @@ #define POWER_N 61 /* Values pertain to this particular parameter: 2^61-1 as modulus*/ -struct BIGNUM_ARRAY_TYPE init_factors(); - - -/*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ +struct BIGNUM_ARRAY_TYPE init_factors (); + +/*********************************************************************************** + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/SRC/lcg/Makefile.in sprng5/SRC/lcg/Makefile.in --- sprng5.orig/SRC/lcg/Makefile.in 2018-07-21 19:48:26.000000000 +0000 +++ sprng5/SRC/lcg/Makefile.in 2021-06-08 16:40:20.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -226,6 +226,7 @@ MKDIR_P = @MKDIR_P@ MPICXX = @MPICXX@ MPIF77 = @MPIF77@ +MPI_CXXLIB = @MPI_CXXLIB@ MPI_DEF = @MPI_DEF@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ diff -urN sprng5.orig/SRC/lcg/lcg.cpp sprng5/SRC/lcg/lcg.cpp --- sprng5.orig/SRC/lcg/lcg.cpp 2018-10-22 19:42:43.000000000 +0000 +++ sprng5/SRC/lcg/lcg.cpp 2021-03-31 13:41:35.000000000 +0000 @@ -1,7 +1,7 @@ /*************************************************************************/ /*************************************************************************/ /* Parallel 48 bit Linear Congruential Generator */ -/* */ +/* */ /* Modifed by: J. Ren */ /* Florida State University */ /* Email: ren@csit.fsu.edu */ @@ -14,7 +14,7 @@ #if __GNUC__ > 3 #include #else - #include +#include #endif #include #include @@ -118,7 +118,7 @@ #define LCGRUNUP 29 -int MAX_STREAMS = 1<<19; +int MAX_STREAMS = 1 << 19; #ifndef TOOMANY #define TOOMANY "generator has branched maximum number of times;\nindependence of streams cannot be guranteed\n" @@ -131,64 +131,68 @@ #else -int mults[][4] = {{0x175,0xe7b,0x5a2,0x287},{0x66d,0xece,0x5de,0x000}, - {0x265,0x605,0xc44,0x3ea},{0x9f5,0x9cc,0x142,0x1ee}, - {0xbbd,0xeb4,0xb38,0x275},{0x605,0xb08,0xa9c,0x739}, - {0x5f5,0xcc2,0x8d7,0x322}}; -int *multiplier=NULL; +int mults[][4] = + { + { 0x175, 0xe7b, 0x5a2, 0x287 }, + { 0x66d, 0xece, 0x5de, 0x000 }, + { 0x265, 0x605, 0xc44, 0x3ea }, + { 0x9f5, 0x9cc, 0x142, 0x1ee }, + { 0xbbd, 0xeb4, 0xb38, 0x275 }, + { 0x605, 0xb08, 0xa9c, 0x739 }, + { 0x5f5, 0xcc2, 0x8d7, 0x322 } }; +int *multiplier = NULL; #endif using namespace std; #define NPARAMS 7 -int NGENS=0; +int NGENS = 0; void Plus (int *a, int *b, int *c); void mult (int *a, int *b, int *c, int size); -void mult_48_32(int *a, int *b, int *c); -void mult_48_64(int *a, int *b, int *c); +void mult_48_32 (int *a, int *b, int *c); +void mult_48_64 (int *a, int *b, int *c); - -int bit_reverse(int n) +/* Reverse the bits of n */ +int bit_reverse (int n) { - int i=31, rev=0; - - for(i=30; i>=0; i--) + int i = 31, rev = 0; + + for (i = 30; i >= 0; i--) { - rev |= (n&1)<>= 1; } - + return rev; } - -void errprint(const char *level, const char *routine, const char *error) +/* Print errors */ +void errprint (const char *level, const char *routine, const char *error) { #ifdef CRAY #pragma _CRI guard 63 #endif - fprintf(stderr,"%s from %s: %s\n",level,routine,error); + fprintf (stderr, "%s from %s: %s\n", level, routine, error); #ifdef CRAY #pragma _CRI endguard 63 #endif } - -int strxncmp(char *s1, char *s2, int n) +/* Compare s1 and s2 for n characters */ +int strxncmp (char *s1, char *s2, int n) { int i; - - for(i=0; i= MAX_STREAMS) /* check if gen_num is valid */ - fprintf(stderr,"WARNING - init_rng: gennum: %d > maximum number of independent streams: %d\n\tIndependence of streams cannot be guranteed.\n", - gn, MAX_STREAMS); + fprintf (stderr, + "WARNING - init_rng: gennum: %d > maximum number of independent streams: %d\n\tIndependence of streams cannot be guranteed.\n", + gn, MAX_STREAMS); if (gn < 0 || gn >= tg) /* check if gen_num is valid */ - { - errprint("ERROR","init_rng","gennum out of range. "); - return 0; - } + { + errprint ("ERROR", "init_rng", "gennum out of range. "); + return 0; + } s &= 0x7fffffff;/* Only 31 LSB of seed considered */ - - if (m < 0 || m >= NPARAMS) - { - errprint("WARNING","init_rng","multiplier not valid. Using Default param"); - m = 0; - } + if (m < 0 || m >= NPARAMS) + { + errprint ("WARNING", "init_rng", + "multiplier not valid. Using Default param"); + m = 0; + } + #ifdef LONG64 if(multiplier == 0) multiplier = mults[m]; #else - if(multiplier == NULL) + if (multiplier == NULL) multiplier = mults[m]; - + #endif - if ((LCG *) mymalloc(1*sizeof(LCG)) == NULL) { + if ((LCG*) mymalloc(1 * sizeof(LCG)) == NULL) + { cerr << "Memory allocation error: init_rng()\n"; return 0; } rng_type = SPRNG_LCG; - gentype = (char *)GENTYPE; + gentype = (char*) GENTYPE; init_seed = s; - getprime_32(1, &prime, gn); + getprime_32 (1, &prime, gn); prime_position = gn; prime_next = tg; parameter = m; - + #ifdef LONG64 seed = INIT_SEED;/* initialize generator */ @@ -280,28 +288,28 @@ seed |= 1; #else - seed[1] = 16651885^((s<<16)&(0xff0000));/* initialize generator */ - seed[0] = 2868876^((s>>8)&(0xffffff)); + seed[1] = 16651885 ^ ((s << 16) & (0xff0000));/* initialize generator */ + seed[0] = 2868876 ^ ((s >> 8) & (0xffffff)); multiplier = mults[m]; - if (prime == 0) + if (prime == 0) seed[1] |= 1; #endif - for(i=0; ifree_rng(); + if (this != &c) + { + this->free_rng (); rng_type = c.rng_type; init_seed = c.init_seed; @@ -333,7 +342,7 @@ prime_next = c.prime_next; gentype = c.gentype; parameter = c.parameter; - + #ifdef LONG64 seed = c.seed; multiplier = c.multiplier; @@ -344,15 +353,15 @@ #endif } - return * this; + return *this; } /* On machines with 32 bit integers, */ /* the Cray's 48 bit integer math is duplicated by breaking the problem into*/ /* steps. The algorithm is linear congruential. M is the multiplier and S*/ /* is the current seed. The 31 High order bits out of the 48 bits are - returned*/ -int LCG::get_rn_int() + returned*/ +int LCG::get_rn_int () { #ifdef LONG64 multiply(); @@ -360,19 +369,18 @@ return ((unsigned LONG64) seed) >> 17; #else int s[4], res[4]; - multiply(multiplier,s,res); - - return (seed[0]<<7) | ((unsigned int) seed[1] >> 17); + multiply (multiplier, s, res); + + return (seed[0] << 7) | ((unsigned int) seed[1] >> 17); #endif -} +} -float LCG::get_rn_flt() +float LCG::get_rn_flt () { - return (float) get_rn_dbl(); + return (float) get_rn_dbl (); } /* get_rn_float */ - -double LCG::get_rn_dbl() +double LCG::get_rn_dbl () { #ifdef LONG64 double temp[1]; @@ -392,181 +400,179 @@ #else - static double equiv[1]; + static double equiv[1]; #define iran ((int *)equiv) #define ran (equiv) - int expo, s[4], res[4]; - - multiply(multiplier,s,res); - + int expo, s[4], res[4]; + + multiply (multiplier, s, res); + #if defined(HP) || defined(SUN) || defined(SOLARIS) || defined(GENERIC) - expo = 1072693248; + expo = 1072693248; /*IEEE mantissa is 52 bits. We have only 48 bits, so we shift our result 4*/ /* bits left. 32-(24+4) = 4 bits are still blank in the lower word, so we*/ /* grab the low 4 bits of seedhi to fill these. */ - iran[LSB] = genptr->seed[1] << 4 | genptr->seed[0] << 28; + iran[LSB] = genptr->seed[1] << 4 | genptr->seed[0] << 28; /* place the remaining (24-4)=20 bits of seedhi in bits 20-0 of ran. */ /* Expo occupies bits 30-20. Bit 31 (sign) is always zero. */ - iran[MSB] = expo | genptr->seed[0] >> 4; + iran[MSB] = expo | genptr->seed[0] >> 4; - return (*ran - (double) 1.0); + return (*ran - (double) 1.0); #else - return seed[0]*TWO_M24 + seed[1]*TWO_M48; + return seed[0] * TWO_M24 + seed[1] * TWO_M48; #endif - + #undef ran #undef iran #endif } /* get_rn_dbl */ - /*************************************************************************/ /*************************************************************************/ /* SPAWN_RNG: spawns new generators */ /*************************************************************************/ /*************************************************************************/ -int LCG::spawn_rng(int nspawned, Sprng ***newgens) +int LCG::spawn_rng (int nspawned, Sprng ***newgens) { - LCG ** genptr; + LCG **genptr; int i, j; - + if (nspawned <= 0) /* check if nspawned is valid */ { nspawned = 1; - errprint("WARNING","spawn_rng","nspawned <= 0. Default value of 1 used for nspawned"); + errprint ("WARNING", "spawn_rng", + "nspawned <= 0. Default value of 1 used for nspawned"); } - genptr = new LCG *[nspawned]; + genptr = new LCG*[nspawned]; - if(genptr == NULL) + if (genptr == NULL) { *newgens = NULL; return 0; } - - for(i=0; iinit_seed = init_seed; - genptr[i]->prime_position = prime_position + prime_next*(i+1); + genptr[i]->prime_position = prime_position + prime_next * (i + 1); - if(genptr[i]->prime_position > MAXPRIMEOFFSET) + if (genptr[i]->prime_position > MAXPRIMEOFFSET) { - fprintf(stderr,"WARNING - spawn_rng: gennum: %d > maximum number of independent streams: %d\n\tIndependence of streams cannot be guranteed.\n", - genptr[i]->prime_position, MAX_STREAMS); + fprintf (stderr, + "WARNING - spawn_rng: gennum: %d > maximum number of independent streams: %d\n\tIndependence of streams cannot be guranteed.\n", + genptr[i]->prime_position, MAX_STREAMS); genptr[i]->prime_position %= MAXPRIMEOFFSET; } - - genptr[i]->prime_next = (nspawned+1)*prime_next; - getprime_32(1, &(genptr[i]->prime), genptr[i]->prime_position); + + genptr[i]->prime_next = (nspawned + 1) * prime_next; + getprime_32 (1, &(genptr[i]->prime), genptr[i]->prime_position); genptr[i]->multiplier = multiplier; genptr[i]->parameter = parameter; genptr[i]->gentype = gentype; genptr[i]->rng_type = rng_type; - + #ifdef LONG64 - genptr[i]->seed = INIT_SEED; /* initialize generator */ - genptr[i]->seed ^= ((unsigned LONG64)init_seed)<<16; + genptr[i]->seed = INIT_SEED; /* initialize generator */ + genptr[i]->seed ^= ((unsigned LONG64)init_seed)<<16; - if (genptr[i]->prime == 0) - genptr[i]->seed |= 1; + if (genptr[i]->prime == 0) + genptr[i]->seed |= 1; #else - genptr[i]->seed[1] = 16651885^((init_seed<<16)&(0xff0000)); - genptr[i]->seed[0] = 2868876^((init_seed>>8)&(0xffffff)); + genptr[i]->seed[1] = 16651885 ^ ((init_seed << 16) & (0xff0000)); + genptr[i]->seed[0] = 2868876 ^ ((init_seed >> 8) & (0xffffff)); - if (genptr[i]->prime == 0) - genptr[i]->seed[1] |= 1; + if (genptr[i]->prime == 0) + genptr[i]->seed[1] |= 1; #endif - if(genptr[i]->prime_position > MAXPRIMEOFFSET) - genptr[i]->advance_seed(); /* advance lcg 10^6 steps from initial seed */ + if (genptr[i]->prime_position > MAXPRIMEOFFSET) + genptr[i]->advance_seed (); /* advance lcg 10^6 steps from initial seed */ - for(j=0; jprime_position); j++) - genptr[i]->get_rn_dbl(); + for (j = 0; j < LCGRUNUP * (genptr[i]->prime_position); j++) + genptr[i]->get_rn_dbl (); } - prime_next = (nspawned+1)*prime_next; + prime_next = (nspawned + 1) * prime_next; NGENS += nspawned; - *newgens = (Sprng **) genptr; - + *newgens = (Sprng**) genptr; + return nspawned; } - /*Compute a + b. a and b are positive 4 digit integers */ /* in base 2^12, modulo 2^48 */ -void Plus(int *a, int *b, int *result) +void Plus (int *a, int *b, int *result) { int temp[5]; int i; - + temp[4] = 0; - - for(i=0; i<4; i++) + + for (i = 0; i < 4; i++) temp[i] = a[i] + b[i]; - - for(i=1; i<5; i++) + + for (i = 1; i < 5; i++) { - temp[i] += temp[i-1]>>12; - temp[i-1] &= 4095; + temp[i] += temp[i - 1] >> 12; + temp[i - 1] &= 4095; } - - for(i=0; i<4 ; i++) + + for (i = 0; i < 4; i++) result[i] = temp[i]; } - - /*multiply two 4 digit numbers in base 2^12 and return 'size' lowest order */ /* digits*/ -void mult(int *a, int *b, int *c, int size) +void mult (int *a, int *b, int *c, int size) { int temp[8]; int i, j; - - for(i=0; i<8; i++) + + for (i = 0; i < 8; i++) temp[i] = 0; - - for(i=0; i<4; i++) - for(j=0; j<4; j++) - temp[i+j] += a[i]*b[j]; - - for(i=1; i<8; i++) + + for (i = 0; i < 4; i++) + for (j = 0; j < 4; j++) + temp[i + j] += a[i] * b[j]; + + for (i = 1; i < 8; i++) { - temp[i] += temp[i-1]>>12; - temp[i-1] &= 4095; + temp[i] += temp[i - 1] >> 12; + temp[i - 1] &= 4095; } - - for(i=0; i> 12; s[2] = seed[0] & 4095; - s[1] = seed[1] >> 12; + s[1] = seed[1] >> 12; s[0] = seed[1] & 4095; - mult_48_32(m, s, res); - seed[1] = res[0] + ((res[1]&4095) << 12) + prime; - seed[0] = ( (unsigned int) seed[1] >> 24) + res[2] + ((unsigned int) res[1] >> 12 ) + (res[3] << 12); + mult_48_32 (m, s, res); + seed[1] = res[0] + ((res[1] & 4095) << 12) + prime; + seed[0] = ((unsigned int) seed[1] >> 24) + res[2] + + ((unsigned int) res[1] >> 12) + (res[3] << 12); seed[1] &= 16777215; seed[0] &= 16777215; } #endif -void LCG::advance_seed() +void LCG::advance_seed () { #ifdef LONG64 int i, found; unsigned LONG64 an, pmult; for(i=0, found=0; i>12)&4095; temp[2] = x0&4095; /* seed */ - temp[3] = (x0>>12)&4095; + switch (i) + { + case 0: + an[0] = 0x001; + an[1] = 0xc00; + an[2] = 0xf0a; + an[3] = 0xdad; + pmult[0] = 0x000; + pmult[1] = 0x700; + pmult[2] = 0xc22; + pmult[3] = 0xa42; + break; + case 1: + an[0] = 0x001; + an[1] = 0x400; + an[2] = 0xd7a; + an[3] = 0xfef; + pmult[0] = 0x000; + pmult[1] = 0xb00; + pmult[2] = 0x58c; + pmult[3] = 0xfa8; + break; + case 2: + an[0] = 0x001; + an[1] = 0xc00; + an[2] = 0x7b5; + an[3] = 0x641; + pmult[0] = 0x000; + pmult[1] = 0xf00; + pmult[2] = 0xc4e; + pmult[3] = 0x0d0; + break; + case 3: + an[0] = 0x001; + an[1] = 0xc00; + an[2] = 0xf72; + an[3] = 0xcf9; + pmult[0] = 0x000; + pmult[1] = 0x700; + pmult[2] = 0xdbe; + pmult[3] = 0x11b; + break; + case 4: + an[0] = 0x001; + an[1] = 0x400; + an[2] = 0x07b; + an[3] = 0xbdf; + pmult[0] = 0x000; + pmult[1] = 0x300; + pmult[2] = 0xc8e; + pmult[3] = 0xc3c; + break; + case 5: + an[0] = 0x001; + an[1] = 0xc00; + an[2] = 0x747; + an[3] = 0xf33; + pmult[0] = 0x000; + pmult[1] = 0xf00; + pmult[2] = 0x0e9; + pmult[3] = 0xb0f; + break; + case 6: + an[0] = 0x001; + an[1] = 0xc00; + an[2] = 0x632; + an[3] = 0xcbe; + pmult[0] = 0x000; + pmult[1] = 0x700; + pmult[2] = 0x7de; + pmult[3] = 0x640; + break; + default: + fprintf (stderr, + "WARNING: advance_seed parameters for multiplier %d not available\n", + i); + return; + } - temp2[0] = prime%(1<<12); temp2[1] = (prime>>12)%(1<<12); - temp2[2] = (prime>>24)%(1<<12); temp2[3] = 0; /* prime */ + x0 = seed[0]; + x1 = seed[1]; - mult(temp,an,temp,4); - mult(temp2,pmult,temp2,4); - - Plus(temp,temp2,temp); - - seed[1] = (temp[1]<<12) + temp[0]; - seed[0] = (temp[3]<<12) + temp[2]; + temp[0] = x1 & 4095; + temp[1] = (x1 >> 12) & 4095; + temp[2] = x0 & 4095; /* seed */ + temp[3] = (x0 >> 12) & 4095; + + temp2[0] = prime % (1 << 12); + temp2[1] = (prime >> 12) % (1 << 12); + temp2[2] = (prime >> 24) % (1 << 12); + temp2[3] = 0; /* prime */ + + mult (temp, an, temp, 4); + mult (temp2, pmult, temp2, 4); + + Plus (temp, temp2, temp); + + seed[1] = (temp[1] << 12) + temp[0]; + seed[0] = (temp[3] << 12) + temp[2]; #endif } - -int LCG::free_rng() +int LCG::free_rng () { - free(this); + free (this); NGENS--; - + return NGENS; } - -int LCG::pack_rng(char **buffer) +int LCG::pack_rng (char **buffer) { unsigned char *p, *initp; unsigned int size, m[2], i; - - size = 6*4 /*sizeof(int)*/ + 2*8/*sizeof(unsigned LONG64)*/ + 4;// strlen(gentype)+1; + + size = 6 * 4 /*sizeof(int)*/+ 2 * 8/*sizeof(unsigned LONG64)*/+ 4; // strlen(gentype)+1; /* The new load/store routines make using sizeof unnecessary. Infact, */ /* using sizeof could be erroneous. */ - initp = p = (unsigned char *) mymalloc(size); + initp = p = (unsigned char*) mymalloc(size); - if(p == NULL) + if (p == NULL) { *buffer = NULL; return 0; } - p += store_int(rng_type,4,p); + p += store_int (rng_type, 4, p); #ifdef LONG64 p += store_long64(seed,8,p); @@ -760,55 +814,51 @@ p += store_int(parameter,4,p); p += store_long64(multiplier,8,p); #else - m[0] = seed[0]>>8; - m[1] = seed[0]<<24 | seed[1]; - p += store_intarray(m,2,4,p); - p += store_int(init_seed,4,p); - p += store_int(prime,4,p); - p += store_int(prime_position,4,p); - p += store_int(prime_next,4,p); - p += store_int(parameter,4,p); + m[0] = seed[0] >> 8; + m[1] = seed[0] << 24 | seed[1]; + p += store_intarray (m, 2, 4, p); + p += store_int (init_seed, 4, p); + p += store_int (prime, 4, p); + p += store_int (prime_position, 4, p); + p += store_int (prime_next, 4, p); + p += store_int (parameter, 4, p); /* The following is done since the multiplier is stored in */ /* pieces of 12 bits each */ - m[1] = multiplier[2]&0xff; - m[1] <<= 24; - m[1] |= multiplier[1]<<12; + m[1] = multiplier[2] & 0xff; + m[1] <<= 24; + m[1] |= multiplier[1] << 12; m[1] |= multiplier[0]; - m[0] = (multiplier[3]<<4) | (multiplier[2]>>8); - - p += store_intarray(m,2,4,p); + m[0] = (multiplier[3] << 4) | (multiplier[2] >> 8); + + p += store_intarray (m, 2, 4, p); #endif - *buffer = (char *) initp; + *buffer = (char*) initp; - assert(p-initp == size); + assert (p - initp == size); - return p-initp; + return p - initp; } - -int LCG::get_seed_rng() +int LCG::get_seed_rng () { return init_seed; } - -int LCG::unpack_rng( char *packed) +int LCG::unpack_rng (char *packed) { unsigned char *p; unsigned int m[4], m2[2], i, id; - p = (unsigned char *) packed; + p = (unsigned char*) packed; - /*if(this == NULL) { + p += load_int (p, 4, (unsigned int*) &rng_type); + + if (rng_type != SPRNG_LCG) + { + fprintf (stderr, "ERROR: Unpacked ' %d ' instead of ' %d '\n", rng_type, + SPRNG_LCG); return 0; - }*/ - - p += load_int(p,4,(unsigned int *)&rng_type); - - if (rng_type != SPRNG_LCG) { - fprintf(stderr,"ERROR: Unpacked ' %d ' instead of ' %d '\n", rng_type, SPRNG_LCG); - return 0; - } + } #ifdef LONG64 p += load_long64(p,8,&seed); @@ -820,54 +870,53 @@ p += load_long64(p,8,&multiplier); #else - p += load_intarray(p,2,4,m2); - seed[1] = m2[1]&0xffffff; seed[0] = m2[1]>>24 | m2[0]<<8; - p += load_int(p,4,(unsigned int *)&init_seed); - p += load_int(p,4,(unsigned int *)&prime); - p += load_int(p,4,(unsigned int *)&prime_position); - p += load_int(p,4,(unsigned int *)&prime_next); - p += load_int(p,4,(unsigned int *)¶meter); - p += load_intarray(p,2,4,m2); + p += load_intarray (p, 2, 4, m2); + seed[1] = m2[1] & 0xffffff; + seed[0] = m2[1] >> 24 | m2[0] << 8; + p += load_int (p, 4, (unsigned int*) &init_seed); + p += load_int (p, 4, (unsigned int*) &prime); + p += load_int (p, 4, (unsigned int*) &prime_position); + p += load_int (p, 4, (unsigned int*) &prime_next); + p += load_int (p, 4, (unsigned int*) ¶meter); + p += load_intarray (p, 2, 4, m2); /* The following is done since the multiplier is stored in */ /* pieces of 12 bits each */ - m[0] = m2[1]&0xfff; - m[1] = (m2[1]&0xfff000)>>12; - m[2] = (m2[1]&0xff000000)>>24 | (m2[0]&0xf)<<8; - m[3] = (m2[0]&0xfff0)>>4; - + m[0] = m2[1] & 0xfff; + m[1] = (m2[1] & 0xfff000) >> 12; + m[2] = (m2[1] & 0xff000000) >> 24 | (m2[0] & 0xf) << 8; + m[3] = (m2[0] & 0xfff0) >> 4; + #endif - - if(parameter < 0 || parameter >= NPARAMS) + if (parameter < 0 || parameter >= NPARAMS) { - fprintf(stderr,"ERROR: Unpacked parameters not acceptable.\n"); - free(this); + fprintf (stderr, "ERROR: Unpacked parameters not acceptable.\n"); + free (this); return 0; } - + multiplier = mults[parameter]; - + NGENS++; return 1; } - -int LCG::print_rng() +int LCG::print_rng () { - printf("\n%s\n", GENTYPE+2); - printf("\n \tseed = %d, stream_number = %d\tparameter = %d\n\n", init_seed, prime_position, parameter); + printf ("\n%s\n", GENTYPE + 2); + printf ("\n \tseed = %d, stream_number = %d\tparameter = %d\n\n", init_seed, + prime_position, parameter); return 1; } - /*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/SRC/lcg/lcg.h sprng5/SRC/lcg/lcg.h --- sprng5.orig/SRC/lcg/lcg.h 2014-08-25 17:57:48.000000000 +0000 +++ sprng5/SRC/lcg/lcg.h 2021-03-31 13:35:46.000000000 +0000 @@ -1,69 +1,69 @@ #ifndef _lcg_h #define _lcg_h -extern "C" { -class LCG : public Sprng +extern "C" { - public: + class LCG : public Sprng + { + public: - LCG(); - int init_rng(int, int, int, int); - ~LCG(); - LCG (const LCG &); - LCG & operator= (const LCG &); + LCG (); + int init_rng (int, int, int, int); + ~LCG (); + LCG (const LCG&); + LCG& operator= (const LCG&); - int get_rn_int (); - float get_rn_flt (); - double get_rn_dbl (); - int spawn_rng (int nspawned, Sprng ***newgens); - int get_seed_rng (); - int free_rng (); - int pack_rng (char **buffer); - int unpack_rng (char *packed); - int print_rng (); + int get_rn_int (); + float get_rn_flt (); + double get_rn_dbl (); + int spawn_rng (int nspawned, Sprng ***newgens); + int get_seed_rng (); + int free_rng (); + int pack_rng (char **buffer); + int unpack_rng (char *packed); + int print_rng (); - private: + private: - int rng_type; + int rng_type; #ifdef LONG64 - unsigned LONG64 seed; - int init_seed; - int prime; - int prime_position; - int prime_next; - char *gentype; - int parameter; - unsigned LONG64 multiplier; + unsigned LONG64 seed; + int init_seed; + int prime; + int prime_position; + int prime_next; + char *gentype; + int parameter; + unsigned LONG64 multiplier; - inline void multiply(); + inline void multiply(); #else - int seed[2]; - int init_seed; - int prime; - int prime_position; - int prime_next; - char *gentype; - int parameter; - int *multiplier; + int seed[2]; + int init_seed; + int prime; + int prime_position; + int prime_next; + char *gentype; + int parameter; + int *multiplier; - inline void multiply(int *, int *, int *); - + inline void multiply (int*, int*, int*); + #endif - void advance_seed(); -}; + void advance_seed (); + }; } #endif - - -/*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ + +/*********************************************************************************** + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/SRC/lcg64/Makefile.in sprng5/SRC/lcg64/Makefile.in --- sprng5.orig/SRC/lcg64/Makefile.in 2018-07-21 19:48:26.000000000 +0000 +++ sprng5/SRC/lcg64/Makefile.in 2021-06-08 16:40:20.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -226,6 +226,7 @@ MKDIR_P = @MKDIR_P@ MPICXX = @MPICXX@ MPIF77 = @MPIF77@ +MPI_CXXLIB = @MPI_CXXLIB@ MPI_DEF = @MPI_DEF@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ diff -urN sprng5.orig/SRC/lcg64/lcg64.cpp sprng5/SRC/lcg64/lcg64.cpp --- sprng5.orig/SRC/lcg64/lcg64.cpp 2018-10-22 19:42:13.000000000 +0000 +++ sprng5/SRC/lcg64/lcg64.cpp 2021-03-31 19:01:38.000000000 +0000 @@ -1,7 +1,7 @@ /*************************************************************************/ /*************************************************************************/ /* Parallel 64-bit Linear Congruential Generator */ -/* */ +/* */ /* Modifed by: J. Ren */ /* Florida State University */ /* Email: ren@csit.fsu.edu */ @@ -12,7 +12,7 @@ /* */ /* Based on the implementation by: */ /* Ashok Srinivasan (May 1998) */ -/* */ +/* */ /* Note: The modulus is 2^64 */ /* */ /* Disclaimer: NCSA expressly disclaims any and all warranties, expressed*/ @@ -26,11 +26,10 @@ /*************************************************************************/ /*************************************************************************/ - #if __GNUC__ > 3 #include #else - #include +#include #endif #include #include @@ -54,10 +53,9 @@ /*** Name for Generator ***/ #define GENTYPE VERSION "64 bit Linear Congruential Generator with Prime Addend" -int MAX_STREAMS = (146138719); /*** Maximum number of independent streams ***/ +int MAX_STREAMS = (146138719); /*** Maximum number of independent streams ***/ #define NPARAMS 3 /*** number of valid parameters ***/ - #ifndef LONG64 #if SIZEOF_LONG_INT == 8 #define LONG64 long @@ -80,16 +78,15 @@ #define load_long64array load_longlongarray #endif +unsigned int PARAMLIST[NPARAMS][2] = + { + { 0x87b0b0fdU, 0x27bb2ee6U }, + { 0xe78b6955U, 0x2c6fe96eU }, + { 0x31a53f85U, 0x369dea0fU } }; -unsigned int PARAMLIST[NPARAMS][2] = {{0x87b0b0fdU, 0x27bb2ee6U}, - {0xe78b6955U,0x2c6fe96eU}, - {0x31a53f85U,0x369dea0fU}}; - - /*************************************************************************/ /* You should not need to look at the next few lines! */ - #define INIT_SEED1 0x2bc6ffffU #define INIT_SEED0 0x8cfe166dU @@ -103,64 +100,66 @@ /* */ /************************************************************************/ -int NGENS=0; /* number of random streams in current process */ +int NGENS = 0; /* number of random streams in current process */ - - /* Initialize random number stream */ -int LCG64::init_rng(int gn, int tg, int s, int p) +int LCG64::init_rng (int gn, int tg, int s, int p) { -/* gives back one stream (node gennum) with updated spawning */ -/* info; should be called total_gen times, with different value */ -/* of gennum in [0,total_gen) each call */ + /* gives back one stream (node gennum) with updated spawning */ + /* info; should be called total_gen times, with different value */ + /* of gennum in [0,total_gen) each call */ int i; double tempdbl; if (tg <= 0) /* Is total_gen valid ? */ { tg = 1; - fprintf(stderr,"WARNING - lcg64 init_rng: Total_gen <= 0. Default value of 1 used for total_gen\n"); + fprintf (stderr, + "WARNING - lcg64 init_rng: Total_gen <= 0. Default value of 1 used for total_gen\n"); } if (gn >= MAX_STREAMS) /* check if gen_num is valid */ - fprintf(stderr,"WARNING - lcg64 init_rng: gennum: %d > maximum number of independent streams: %d\n\tIndependence of streams cannot be guranteed.\n", - gn, MAX_STREAMS); - + fprintf (stderr, + "WARNING - lcg64 init_rng: gennum: %d > maximum number of independent streams: %d\n\tIndependence of streams cannot be guranteed.\n", + gn, MAX_STREAMS); + if (gn < 0 || gn >= tg) /* check if gen_num is valid */ { - fprintf(stderr,"ERROR - lcg64 init_rng: gennum %d out of range [%d,%d).\n", - gn, 0, tg); + fprintf (stderr, + "ERROR - lcg64 init_rng: gennum %d out of range [%d,%d).\n", gn, + 0, tg); return 0; } - if (p < 0 || p >= NPARAMS) /* check if parameter is valid */ + if (p < 0 || p >= NPARAMS) /* check if parameter is valid */ { - fprintf(stderr,"WARNING - lcg64 init_rng: parameter not valid. Using Default parameter.\n"); + fprintf (stderr, + "WARNING - lcg64 init_rng: parameter not valid. Using Default parameter.\n"); p = 0; } - if ((LCG64 *) mymalloc(1*sizeof(LCG64)) == NULL) + if ((LCG64*) mymalloc(1 * sizeof(LCG64)) == NULL) return 0; - + /* Initiallize data structure variables */ rng_type = SPRNG_LCG64; - gentype = (char *)GENTYPE; + gentype = (char*) GENTYPE; stream_number = gn; nstreams = tg; - init_seed = s & 0x7fffffff; /* Only 31 LSB of seed considered */ + init_seed = s & 0x7fffffff; /* Only 31 LSB of seed considered */ parameter = p; spawn_offset = tg; - + /*** Change the next line depending on your generators data needs ***/ - narrays = 0; /* number of arrays needed by your generator */ + narrays = 0; /* number of arrays needed by your generator */ - if(narrays > 0) + if (narrays > 0) { array_sizes = new int[narrays]; - arrays = new int * [narrays]; - - if(array_sizes == NULL || arrays == NULL) + arrays = new int*[narrays]; + + if (array_sizes == NULL || arrays == NULL) return 0; } else @@ -168,40 +167,42 @@ array_sizes = NULL; arrays = NULL; } - + /* initiallize ...array_sizes to the sizes of the arrays */ - for(i=0; i>22 | (PARAMLIST[p][1]&0xfff)<<10); - multiplier[2] = (double) (PARAMLIST[p][1]>>12); - state[0] = (double) ((INIT_SEED0^gn)&0x3fffff); - state[1] = (double) ((INIT_SEED0^gn)>>22 | ((INIT_SEED1 ^ (unsigned)s<<1)&0xfff)<<10); - state[2] = (double) ((INIT_SEED1 ^ (unsigned)s<<1)>>12); + multiplier[0] = (double) (PARAMLIST[p][0] & 0x3fffff); + multiplier[1] = (double) (PARAMLIST[p][0] >> 22 + | (PARAMLIST[p][1] & 0xfff) << 10); + multiplier[2] = (double) (PARAMLIST[p][1] >> 12); + state[0] = (double) ((INIT_SEED0 ^ gn) & 0x3fffff); + state[1] = (double) ((INIT_SEED0 ^ gn) >> 22 + | ((INIT_SEED1 ^ (unsigned) s << 1) & 0xfff) << 10); + state[2] = (double) ((INIT_SEED1 ^ (unsigned) s << 1) >> 12); #endif - for(i=0; i<127*stream_number; i++) - tempdbl = get_rn_dbl(); - - NGENS++; /* NGENS = # of streams */ + for (i = 0; i < 127 * stream_number; i++) + tempdbl = get_rn_dbl (); + NGENS++; /* NGENS = # of streams */ + return 1; -} +} -LCG64::LCG64() +LCG64::LCG64 () { rng_type = 2; gentype = NULL; @@ -229,12 +230,12 @@ #endif } -LCG64::~LCG64() +LCG64::~LCG64 () { - free_rng(); + free_rng (); } -LCG64::LCG64(const LCG64 &c) +LCG64::LCG64 (const LCG64 &c) { rng_type = c.rng_type; gentype = c.gentype; @@ -261,10 +262,11 @@ #endif } -LCG64 & LCG64::operator= (const LCG64 &c) +LCG64& LCG64::operator= (const LCG64 &c) { - if (this != &c) { - this->free_rng(); + if (this != &c) + { + this->free_rng (); rng_type = c.rng_type; gentype = c.gentype; @@ -277,7 +279,7 @@ arrays = c.arrays; spawn_offset = c.spawn_offset; prime = c.prime; - + #ifdef LONG64 state = c.state; multiplier = c.multiplier; @@ -293,31 +295,32 @@ return *this; } -void LCG64::advance_state() +void LCG64::advance_state () { #ifdef LONG64 state = state*multiplier + prime; #else double t0, t1, t2, t3, st0, st1, st2; - t0 = state[0]*multiplier[0] + prime; - t1 = (double) (int) (t0*TWO_M22); - st0 = t0 - TWO_P22*t1; - assert( (int) st0 == st0); - t1 += state[1]*multiplier[0] + state[0]*multiplier[1]; - t2 = (double) (int) (t1*TWO_M22); - st1 = t1 - TWO_P22*t2; - assert( (int) st1 == st1); - t2 += state[2]*multiplier[0] + state[1]*multiplier[1] + state[0]*multiplier[2]; - t3 = (double) (int) (t2*TWO_M20); - st2 = t2 - TWO_P20*t3; - assert( (int) st2 == st2); - state[0] = st0; - state[1] = st1; + t0 = state[0] * multiplier[0] + prime; + t1 = (double) (int) (t0 * TWO_M22); + st0 = t0 - TWO_P22 * t1; + assert ((int) st0 == st0); + t1 += state[1] * multiplier[0] + state[0] * multiplier[1]; + t2 = (double) (int) (t1 * TWO_M22); + st1 = t1 - TWO_P22 * t2; + assert ((int) st1 == st1); + t2 += state[2] * multiplier[0] + state[1] * multiplier[1] + + state[0] * multiplier[2]; + t3 = (double) (int) (t2 * TWO_M20); + st2 = t2 - TWO_P20 * t3; + assert ((int) st2 == st2); + state[0] = st0; + state[1] = st1; state[2] = st2; #endif } -double LCG64::get_rn_dbl() +double LCG64::get_rn_dbl () { #ifdef LONG64 #ifdef _LONG_LONG @@ -345,249 +348,239 @@ #define LSB (1-MSB) double ans; unsigned int ist0, ist1, ist2; - static double temp[1] = {0.0}; + static double temp[1] = + { 0.0 }; - advance_state(); /* next state in sequence */ + advance_state (); /* next state in sequence */ - ist0 = static_cast(state[0]); - ist1 = static_cast(state[1]); - ist2 = static_cast(state[2]); - + ist0 = static_cast (state[0]); + ist1 = static_cast (state[1]); + ist2 = static_cast (state[2]); + #if defined(HP) || defined(SUN) || defined(SOLARIS) || defined(GENERIC) /*IEEE mantissa is 52 bits. */ ((unsigned int *)temp)[LSB] = ist1<<10 | ist0>>12; ((unsigned int *)temp)[MSB] = EXPO | ist2; return *temp - (double) 1.0; #else - return state[2]*TWO_M20 + state[1]*TWO_M42 + state[0]*TWO_M64; + return state[2] * TWO_M20 + state[1] * TWO_M42 + state[0] * TWO_M64; #endif #endif } -int LCG64::get_rn_int() +int LCG64::get_rn_int () { #ifdef LONG64 advance_state(); /* next state in sequence */ return state>>33; #else - return (int) (get_rn_dbl()*0x80000000U); + return (int) (get_rn_dbl () * 0x80000000U); #endif -} +} - /* Return a single precision random number */ -float LCG64::get_rn_flt() +float LCG64::get_rn_flt () { - return (float) get_rn_dbl(); + return (float) get_rn_dbl (); } - /*************************************************************************/ /*************************************************************************/ /* SPAWN_RNG: spawns new generators */ /*************************************************************************/ /*************************************************************************/ -int LCG64::spawn_rng(int nspawned, Sprng ***newgens) +int LCG64::spawn_rng (int nspawned, Sprng ***newgens) { - LCG64 ** genptr; + LCG64 **genptr; int i, j; - + if (nspawned <= 0) /* is nspawned valid ? */ { nspawned = 1; - fprintf(stderr,"WARNING - spawn_rng: nspawned <= 0. Default value of 1 used for nspawned\n"); + fprintf (stderr, + "WARNING - spawn_rng: nspawned <= 0. Default value of 1 used for nspawned\n"); } - - genptr = new LCG64 * [nspawned]; - if(genptr == NULL) /* allocate memory for pointers to structures */ + genptr = new LCG64*[nspawned]; + + if (genptr == NULL) /* allocate memory for pointers to structures */ { *newgens = NULL; return 0; } - - for(i=0; i MAX_STREAMS) /* change seed to avoid repeating sequence */ - s = (init_seed)^gn; + + gn = stream_number + spawn_offset * (i + 1); + + if (gn > MAX_STREAMS) /* change seed to avoid repeating sequence */ + s = (init_seed) ^ gn; else s = init_seed; - + /* Initialize a stream. This stream has incorrect spawning information. - But we will correct it below. */ + But we will correct it below. */ genptr[i] = new LCG64; - genptr[i]->init_rng (gn, gn+1, s, parameter); - - if(genptr[i] == NULL) /* Was generator initiallized? */ + genptr[i]->init_rng (gn, gn + 1, s, parameter); + + if (genptr[i] == NULL) /* Was generator initiallized? */ { nspawned = i; break; } - genptr[i]->spawn_offset = (nspawned+1)*spawn_offset; + genptr[i]->spawn_offset = (nspawned + 1) * spawn_offset; } - - spawn_offset *= (nspawned+1); - *newgens = (Sprng **) genptr; - + + spawn_offset *= (nspawned + 1); + *newgens = (Sprng**) genptr; + return nspawned; } - /* Free memory allocated for data structure associated with stream */ -int LCG64::free_rng() +int LCG64::free_rng () { int i; - - assert(this != NULL); - for(i=0; i 0) + for (i = 0; i < narrays; i++) + delete[] arrays[i]; + + if (narrays > 0) { - delete [] array_sizes; - delete [] arrays; - } - + delete[] array_sizes; + delete[] arrays; + } + NGENS--; return NGENS; } - -int LCG64::pack_rng(char **buffer) +int LCG64::pack_rng (char **buffer) { unsigned char *p, *initp; int size, i; unsigned int temp, m[2]; size = 4 + 48 + 4; - - initp = p = (unsigned char *) mymalloc(size); /* allocate memory */ + + initp = p = (unsigned char*) mymalloc(size); /* allocate memory */ /* The new load/store routines make using sizeof unnecessary. Infact, */ /* using sizeof could be erroneous. */ - if(p == NULL) + if (p == NULL) { *buffer = NULL; return 0; } - - - p += store_int(rng_type,4,p); - p += store_int(stream_number,4,p); - p += store_int(nstreams,4,p); - p += store_int(init_seed,4,p); - p += store_int(parameter,4,p); - p += store_int(narrays,4,p); - p += store_int(spawn_offset,4,p); - p += store_int(prime,4,p); + + p += store_int (rng_type, 4, p); + p += store_int (stream_number, 4, p); + p += store_int (nstreams, 4, p); + p += store_int (init_seed, 4, p); + p += store_int (parameter, 4, p); + p += store_int (narrays, 4, p); + p += store_int (spawn_offset, 4, p); + p += store_int (prime, 4, p); #ifdef LONG64 /* 64 bit integer types */ p += store_long64(state,8,p); p += store_long64(multiplier,8,p); #else /* No 64 bit type available */ - m[0] = static_cast(state[2]); - temp = static_cast(state[1]); - m[0]=(m[0]<<12)|(temp>>10); - m[1] = static_cast(state[1]); - temp = static_cast(state[0]); - m[1]=(m[1]<<22)|(temp); - p += store_intarray(m,2,4,p); - m[0] = static_cast(multiplier[2]); - temp = static_cast(multiplier[1]); - m[0]=(m[0]<<12)|(temp>>10); - m[1] = static_cast(multiplier[1]); - temp = static_cast(multiplier[0]); - m[1]=(m[1]<<22)|(temp); - p += store_intarray(m,2,4,p); + m[0] = static_cast (state[2]); + temp = static_cast (state[1]); + m[0] = (m[0] << 12) | (temp >> 10); + m[1] = static_cast (state[1]); + temp = static_cast (state[0]); + m[1] = (m[1] << 22) | (temp); + p += store_intarray (m, 2, 4, p); + m[0] = static_cast (multiplier[2]); + temp = static_cast (multiplier[1]); + m[0] = (m[0] << 12) | (temp >> 10); + m[1] = static_cast (multiplier[1]); + temp = static_cast (multiplier[0]); + m[1] = (m[1] << 22) | (temp); + p += store_intarray (m, 2, 4, p); #endif - - *buffer = (char *) initp; - assert(p-initp == size); - return p-initp; + + *buffer = (char*) initp; + assert (p - initp == size); + return p - initp; } - -int LCG64::unpack_rng( char *packed) +int LCG64::unpack_rng (char *packed) { unsigned int i, m[2]; unsigned char *p; - - p = (unsigned char *) packed; - /*if(this == NULL) - return 0;*/ + p = (unsigned char*) packed; - p += load_int(p,4,(unsigned int *)&rng_type); - if (rng_type != SPRNG_LCG64) { - fprintf(stderr,"ERROR: Unpacked ' %d ' instead of ' %d '\n", rng_type, SPRNG_LCG64); + p += load_int (p, 4, (unsigned int*) &rng_type); + + if (rng_type != SPRNG_LCG64) + { + fprintf (stderr, "ERROR: Unpacked ' %d ' instead of ' %d '\n", rng_type, + SPRNG_LCG64); return 0; } - p += load_int(p,4,(unsigned int *)&stream_number); - p += load_int(p,4,(unsigned int *)&nstreams); - p += load_int(p,4,(unsigned int *)&init_seed); - p += load_int(p,4,(unsigned int *)¶meter); - p += load_int(p,4,(unsigned int *)&narrays); - p += load_int(p,4,(unsigned int *)&spawn_offset); - p += load_int(p,4,&prime); + p += load_int (p, 4, (unsigned int*) &stream_number); + p += load_int (p, 4, (unsigned int*) &nstreams); + p += load_int (p, 4, (unsigned int*) &init_seed); + p += load_int (p, 4, (unsigned int*) ¶meter); + p += load_int (p, 4, (unsigned int*) &narrays); + p += load_int (p, 4, (unsigned int*) &spawn_offset); + p += load_int (p, 4, &prime); #ifdef LONG64 /* 64 bit integer types */ p += load_long64(p,8,&state); p += load_long64(p,8,&multiplier); #else /* No 64 bit type available */ - p += load_intarray(p,2,4,m); - state[0] = (double) (m[1]&0x3fffff); - state[1] = (double) ((m[1]>>22) | (m[0]&0xfff)<<10); - state[2] = (double) (m[0]>>12); - p += load_intarray(p,2,4,m); - multiplier[0] = (double) (m[1]&0x3fffff); - multiplier[1] = (double) ((m[1]>>22) | (m[0]&0xfff)<<10); - multiplier[2] = (double) (m[0]>>12); + p += load_intarray (p, 2, 4, m); + state[0] = (double) (m[1] & 0x3fffff); + state[1] = (double) ((m[1] >> 22) | (m[0] & 0xfff) << 10); + state[2] = (double) (m[0] >> 12); + p += load_intarray (p, 2, 4, m); + multiplier[0] = (double) (m[1] & 0x3fffff); + multiplier[1] = (double) ((m[1] >> 22) | (m[0] & 0xfff) << 10); + multiplier[2] = (double) (m[0] >> 12); #endif - array_sizes = NULL; arrays = NULL; - + NGENS++; return 1; } - - -int LCG64::get_seed_rng() +int LCG64::get_seed_rng () { return init_seed; } - - -int LCG64::print_rng() +int LCG64::print_rng () { - printf("\n%s\n", GENTYPE+2); - printf("\n \tseed = %d, stream_number = %d\tparameter = %d\n\n", init_seed, stream_number, parameter); + printf ("\n%s\n", GENTYPE + 2); + printf ("\n \tseed = %d, stream_number = %d\tparameter = %d\n\n", init_seed, + stream_number, parameter); return 1; } - - /*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/SRC/lcg64/lcg64.h sprng5/SRC/lcg64/lcg64.h --- sprng5.orig/SRC/lcg64/lcg64.h 2014-08-25 17:58:00.000000000 +0000 +++ sprng5/SRC/lcg64/lcg64.h 2021-03-31 18:58:22.000000000 +0000 @@ -1,62 +1,61 @@ #ifndef _lcg64_h #define _lcg64_h -extern "C" { - -class LCG64 : public Sprng +extern "C" { - public: - int init_rng(int, int, int, int); - LCG64(); - ~LCG64(); - LCG64 (const LCG64 &); - LCG64 & operator = (const LCG64 &); - int get_rn_int (); - float get_rn_flt (); - double get_rn_dbl (); - int spawn_rng (int, Sprng ***); - int get_seed_rng (); - int free_rng (); - int pack_rng (char **); - int unpack_rng (char *); - int print_rng (); + class LCG64 : public Sprng + { + public: - private: + int init_rng (int, int, int, int); + LCG64 (); + ~LCG64 (); + LCG64 (const LCG64&); + LCG64& operator = (const LCG64&); + int get_rn_int (); + float get_rn_flt (); + double get_rn_dbl (); + int spawn_rng (int, Sprng***); + int get_seed_rng (); + int free_rng (); + int pack_rng (char**); + int unpack_rng (char*); + int print_rng (); - int rng_type; - char *gentype; - int stream_number; - int nstreams; - int init_seed; - int parameter; - int narrays; - int *array_sizes; - int **arrays; - int spawn_offset; - - unsigned int prime; + private: + int rng_type; + char *gentype; + int stream_number; + int nstreams; + int init_seed; + int parameter; + int narrays; + int *array_sizes; + int **arrays; + int spawn_offset; + + unsigned int prime; + #ifdef LONG64 /* 64 bit integer types */ - unsigned LONG64 state, multiplier; + unsigned LONG64 state, multiplier; #else /* No 64 bit type available, so use array of floats */ - double state[3], multiplier[3];/* simulate 64 bit arithmetic */ + double state[3], multiplier[3];/* simulate 64 bit arithmetic */ #endif - inline void advance_state(); -}; + inline void advance_state (); + }; } - #endif - - -/*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ + +/*********************************************************************************** + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/SRC/lfg/Makefile.in sprng5/SRC/lfg/Makefile.in --- sprng5.orig/SRC/lfg/Makefile.in 2018-07-21 19:48:26.000000000 +0000 +++ sprng5/SRC/lfg/Makefile.in 2021-06-08 16:40:20.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -226,6 +226,7 @@ MKDIR_P = @MKDIR_P@ MPICXX = @MPICXX@ MPIF77 = @MPIF77@ +MPI_CXXLIB = @MPI_CXXLIB@ MPI_DEF = @MPI_DEF@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ diff -urN sprng5.orig/SRC/licensenotice.txt sprng5/SRC/licensenotice.txt --- sprng5.orig/SRC/licensenotice.txt 2014-08-25 17:51:04.000000000 +0000 +++ sprng5/SRC/licensenotice.txt 2021-05-18 00:01:37.000000000 +0000 @@ -1,11 +1,11 @@ - - -/*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ + + +/*********************************************************************************** +* SPRNG (c) 2014 by Florida State University * +* * +* SPRNG is licensed under a * +* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * +* * +* You should have received a copy of the license along with this * +* work. If not, see . * +************************************************************************************/ diff -urN sprng5.orig/SRC/makeseed.cpp sprng5/SRC/makeseed.cpp --- sprng5.orig/SRC/makeseed.cpp 2014-08-25 17:56:49.000000000 +0000 +++ sprng5/SRC/makeseed.cpp 2021-05-18 00:04:03.000000000 +0000 @@ -1,34 +1,27 @@ #include - using namespace std; -int make_new_seed() +int make_new_seed () { time_t tp; struct tm *temp; unsigned int temp2, temp3; static unsigned int temp4 = 0xe0e1; - - time(&tp); - temp = localtime(&tp); - - temp2 = (temp->tm_sec<<26)+(temp->tm_min<<20)+(temp->tm_hour<<15)+ - (temp->tm_mday<<10)+(temp->tm_mon<<6); - temp3 = (temp->tm_year<<13)+(temp->tm_wday<<10)+(temp->tm_yday<<1)+ - temp->tm_isdst; - temp2 ^= clock()^temp3; - - temp4 = (temp4*0xeeee)%0xffff; - temp2 ^= temp4<<16; - temp4 = (temp4*0xaeee)%0xffff; + time (&tp); + temp = localtime (&tp); + temp2 = (temp->tm_sec << 26) + (temp->tm_min << 20) + (temp->tm_hour << 15) + + (temp->tm_mday << 10) + (temp->tm_mon << 6); + temp3 = (temp->tm_year << 13) + (temp->tm_wday << 10) + (temp->tm_yday << 1) + + temp->tm_isdst; + temp2 ^= clock () ^ temp3; + temp4 = (temp4 * 0xeeee) % 0xffff; + temp2 ^= temp4 << 16; + temp4 = (temp4 * 0xaeee) % 0xffff; temp2 ^= temp4; - temp2 &= 0x7fffffff; - return temp2; } - #if 0 main() { @@ -36,15 +29,12 @@ } #endif - - - -/*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ +/*********************************************************************************** + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/SRC/memory.cpp sprng5/SRC/memory.cpp --- sprng5.orig/SRC/memory.cpp 2014-08-25 17:56:49.000000000 +0000 +++ sprng5/SRC/memory.cpp 2021-05-25 14:54:16.000000000 +0000 @@ -1,34 +1,28 @@ #include #include #include - using namespace std; -void *_mymalloc(long size, int line, const char *message) +void* _mymalloc (long size, int line, const char *message) { char *temp; - - if(size == 0) + if (size == 0) return NULL; - - temp = (char *) malloc(size); - - if(temp == NULL) - { - fprintf(stderr,"\nmemory allocation failure in file: %s at line number: %d\n", message, line); + temp = (char*) malloc (size); + if (temp == NULL) + { + fprintf (stderr,"\nmemory allocation failure in file: %s at line number: %d\n",message, line); return NULL; - } - - return (void *) temp; + } + return (void*) temp; } - - -/*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ + +/*********************************************************************************** + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/SRC/memory.h sprng5/SRC/memory.h --- sprng5.orig/SRC/memory.h 2014-08-25 17:56:46.000000000 +0000 +++ sprng5/SRC/memory.h 2021-01-15 16:26:38.000000000 +0000 @@ -1,15 +1,13 @@ #define mymalloc(a) (_mymalloc((a), __LINE__, __FILE__)) -void *_mymalloc (long size, int line, const char *message); +void* _mymalloc (long size, int line, const char *message); - - -/*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ +/*********************************************************************************** + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/SRC/mlfg/Makefile.in sprng5/SRC/mlfg/Makefile.in --- sprng5.orig/SRC/mlfg/Makefile.in 2018-07-21 19:48:26.000000000 +0000 +++ sprng5/SRC/mlfg/Makefile.in 2021-06-08 16:40:20.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -226,6 +226,7 @@ MKDIR_P = @MKDIR_P@ MPICXX = @MPICXX@ MPIF77 = @MPIF77@ +MPI_CXXLIB = @MPI_CXXLIB@ MPI_DEF = @MPI_DEF@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ diff -urN sprng5.orig/SRC/mlfg/mlfg.cpp sprng5/SRC/mlfg/mlfg.cpp --- sprng5.orig/SRC/mlfg/mlfg.cpp 2019-04-14 17:06:47.000000000 +0000 +++ sprng5/SRC/mlfg/mlfg.cpp 2021-05-26 16:23:58.000000000 +0000 @@ -1,7 +1,7 @@ /*************************************************************************/ /*************************************************************************/ /* Parallel Multiplicative Lagged Fibonacci Generator */ -/* */ +/* */ /* Modifed by: J. Ren */ /* Florida State University */ /* Email: ren@csit.fsu.edu */ @@ -14,7 +14,7 @@ #if __GNUC__ > 3 #include #else - #include +#include #endif #include #include @@ -27,6 +27,8 @@ #include "mlfg.h" #include "store.h" + + #define MAX_STREAMS mlfg_MAX_STREAMS #define NGENS mlfg_NGENS #define valid mlfg_valid @@ -36,20 +38,30 @@ #define GENTYPE VERSION "Multiplicative Lagged Fibonacci Generator" #define NPARAMS 11 /* number of valid parameters */ -int MAX_STREAMS = 0x7fffffff; /* Maximum number streams to init_sprng */ +int MAX_STREAMS = 0x7fffffff; /* Maximum number streams to init_sprng */ -struct vstruct { - int L; - int K; - int LSBS; /* number of least significant bits that are 1 */ - int first; /* the first seed whose LSB is 1 */ +struct vstruct +{ + int L; + int K; + int LSBS; /* number of least significant bits that are 1 */ + int first; /* the first seed whose LSB is 1 */ }; -const struct vstruct valid[] = { {17,5,1,10}, {31,6,1,2}, -{55,24,1,11}, {63,31,1,14}, {127,97,1,21}, {521,353,1,100}, -{521,168,1,83}, {607,334,1,166}, {607,273,1,105}, {1279,418,1,208}, {1279,861,1,233} }; +const struct vstruct valid[] = + { + { 17, 5, 1, 10 }, + { 31, 6, 1, 2 }, + { 55, 24, 1, 11 }, + { 63, 31, 1, 14 }, + { 127, 97, 1, 21 }, + { 521, 353, 1, 100 }, + { 521, 168, 1, 83 }, + { 607, 334, 1, 166 }, + { 607, 273, 1, 105 }, + { 1279, 418, 1, 208 }, + { 1279, 861, 1, 233 } }; - /* int64.h (START) */ #if LONG_MAX > 2147483647L @@ -65,7 +77,6 @@ #define LONG64 long long #endif - #ifdef LONG64 typedef unsigned LONG64 uint64; @@ -99,9 +110,12 @@ typedef unsigned int uint64[2]; -static const uint64 MASK64={0xffffffffU,0xffffffffU}; -static const uint64 MINUS1={0xffffffffU,0xffffffffU}; /* -1 (mod 2^(BITS-2)) */ -static uint64 ONE={0x1U,0x0U}; +static const uint64 MASK64 = + { 0xffffffffU, 0xffffffffU }; +static const uint64 MINUS1 = + { 0xffffffffU, 0xffffffffU }; /* -1 (mod 2^(BITS-2)) */ +static uint64 ONE = + { 0x1U, 0x0U }; #define TWO_M32 2.3283064365386962e-10 /* 2^(-32) */ #define And(a,b,c) {c[0] = a[0]&b[0]; c[1] = a[1]&b[1];} @@ -118,21 +132,35 @@ #define decrement(a,c) {if(a[0]==0){c[1]=a[1]-1;c[0]=0xffffffff;} \ else c[0] = a[0]-1; And(c,MASK64,c);} -static void lshift(uint64 a,int b,uint64 c) +static void lshift (uint64 a, int b, uint64 c) { - if(b<32) - {c[1] = (a[1]<>(32-b)); c[0] = a[0]<<(b);} - else {c[1]=a[0]<<(b-32);c[0]=0;} - And(c,MASK64,c); -} + if (b < 32) + { + c[1] = (a[1] << b) | (a[0] >> (32 - b)); + c[0] = a[0] << (b); + } + else + { + c[1] = a[0] << (b - 32); + c[0] = 0; + } + And(c, MASK64, c); +} -static void rshift(uint64 a,int b,uint64 c) +static void rshift (uint64 a, int b, uint64 c) { - if(b<32) - {c[0] = (a[0]>>b)|(a[1]<<(32-b));c[1] = a[1]>>(b);} - else {c[0]=a[1]>>(b-32);c[1]=0;} - And(c,MASK64,c); -} + if (b < 32) + { + c[0] = (a[0] >> b) | (a[1] << (32 - b)); + c[1] = a[1] >> (b); + } + else + { + c[0] = a[1] >> (b - 32); + c[1] = 0; + } + And(c, MASK64, c); +} #define highword(a) ((a)[1]) #define lowword(a) ((a)[0]) @@ -143,56 +171,55 @@ #endif /* LONG64 or 32 bit */ -static int store_uint64(uint64 l, unsigned char *c) + + + +static int store_uint64 (uint64 l, unsigned char *c) { int i; unsigned int m[2]; - + m[0] = highword(l); m[1] = lowword(l); - - c += store_intarray(m,2,4,c); - return 8; /* return number of chars filled */ + c += store_intarray (m, 2, 4, c); + + return 8; /* return number of chars filled */ } - -static int store_uint64array(uint64 *l, int n, unsigned char *c) +static int store_uint64array (uint64 *l, int n, unsigned char *c) { int i; - - for(i=0; i=0;i--) + for (i = 27; i >= 0; i--) { - new_fill[0] = (new_fill[0]<<1) | (1&bitcnt(reg_fill[0]&temp)); - new_fill[1] = (new_fill[1]<<1) | (1&bitcnt(reg_fill[1]&temp)); + new_fill[0] = (new_fill[0] << 1) | (1 & bitcnt (reg_fill[0] & temp)); + new_fill[1] = (new_fill[1] << 1) | (1 & bitcnt (reg_fill[1] & temp)); temp >>= 1; } - for (i=28;i<32;i++) + for (i = 28; i < 32; i++) { - temp = bitcnt(reg_fill[0]&(mask<>(32-i))); - new_fill[0] |= (1&temp)<> (32 - i))); + new_fill[0] |= (1 & temp) << i; + temp = bitcnt (reg_fill[0] & adv_64[i - 28][0]); + temp ^= bitcnt (reg_fill[1] & adv_64[i - 28][1]); + new_fill[1] |= (1 & temp) << i; } reg_fill[0] = new_fill[0]; reg_fill[1] = new_fill[1]; } -static void get_fill(uint64 *n, uint64 *r, int param, unsigned seed) +static void get_fill (uint64 *n, uint64 *r, int param, unsigned seed) { - int i,j,k,temp[2], length; + int i, j, k, temp[2], length; uint64 tempui; - + length = valid[param].L; - + /* Initialize the shift register with the node number XORed with seed */ temp[1] = highword(n[0]); - temp[0] = lowword(n[0])^seed; + temp[0] = lowword(n[0]) ^ seed; if (!temp[0]) temp[0] = GS0; + advance_reg (temp); /* Advance the shift register some */ + advance_reg (temp); - advance_reg(temp); /* Advance the shift register some */ - advance_reg(temp); - /* The first word of the RNG is defined by the LSBs of the node number */ - And(n[0],INT_MASK,tempui); - lshift(tempui,1,r[0]); - + And(n[0], INT_MASK, tempui); + lshift (tempui, 1, r[0]); + /* The RNG is filled with the bits of the shift register, at each time */ /* shifted up to make room for the bits defining the canonical form; */ /* the node number is XORed into the fill to make the generators unique */ - for (i=1;i=0;i--) + for (i = length - 3; i >= 0; i--) { - And(b[i],mask1,temp1); + And(b[i], mask1, temp1); - if(notzero(temp1)) - add(a[i+1],ONE,a[i+1]); + if (notzero(temp1)) + add(a[i + 1], ONE, a[i + 1]); - And(b[i],INTX2_MASK,temp1); - lshift(temp1,1,a[i]); + And(b[i], INTX2_MASK, temp1); + lshift (temp1, 1, a[i]); } } -static void pow3(uint64 n, uint64 *ui) /* return 3^n (mod 2^BITS) */ +static void pow3 (uint64 n, uint64 *ui) /* return 3^n (mod 2^BITS) */ { uint64 p, value, temp, bit, temp2, temp3; int exponent; - - set(n,p); - seti(3,temp); - seti(1,temp3); - And(n,temp3,temp2); - - if (notzero(temp2)) { - seti(3,value); + + set(n, p); + seti(3, temp); + seti(1, temp3); + And(n, temp3, temp2); + + if (notzero(temp2)) + { + seti(3, value); } - else { - seti(1,value); + else + { + seti(1, value); } - seti(1,bit); - - for(exponent=2; exponent<64; exponent++) + seti(1, bit); + + for (exponent = 2; exponent < 64; exponent++) { - multiply(temp,temp,temp); - lshift(bit,1,bit); - - And(bit,n,temp2); - if(notzero(temp2)) - multiply(value,temp,value); + multiply(temp, temp, temp); + lshift (bit, 1, bit); + + And(bit, n, temp2); + if (notzero(temp2)) + multiply(value, temp, value); } - - And(value,MASK64,value); - - set(value,(*ui)); + + And(value, MASK64, value); + + set(value, (*ui)); } -static void findseed(int sign, uint64 n, uint64 *ui) +static void findseed (int sign, uint64 n, uint64 *ui) { uint64 temp; - - pow3(n,&temp); - - if(sign&1) - multiply(temp,MINUS1,temp); - - set(temp,(*ui)); + + pow3 (n, &temp); + + if (sign & 1) + multiply(temp, MINUS1, temp); + + set(temp, (*ui)); } -void MLFG::advance_state() +void MLFG::advance_state () { int lv = lval, kv = kval; int lptr; hptr--; - - if(hptr < 0) - hptr = lv-1; + if (hptr < 0) + hptr = lv - 1; + lptr = hptr + kv; - if (lptr>=lv) - lptr -= lv; + if (lptr >= lv) + lptr -= lv; - multiply(lags[hptr],lags[lptr],lags[hptr]); + multiply(lags[hptr], lags[lptr], lags[hptr]); } -static MLFG** initialize(int rng_type_local, int ngen_local, int param_local, - unsigned int seed_local, uint64 *nstart_local, - unsigned int initseed_local) +static MLFG** initialize (int rng_type_local, int ngen_local, int param_local, + unsigned int seed_local, uint64 *nstart_local, + unsigned int initseed_local) { - int i,j,k,l,m,*order, length; - MLFG ** q; + int i, j, k, l, m, *order, length; + MLFG **q; uint64 *nindex, temp1, mask; length = valid[param_local].L; - - // order = (int *) mymalloc(ngen_local*sizeof(int)); - // q = (MLFG **) mymalloc(ngen_local*sizeof(MLFG *)); + order = new int[ngen_local]; - q = new MLFG * [ngen_local]; + q = new MLFG*[ngen_local]; - if (q == NULL || order == NULL) + if (q == NULL || order == NULL) return NULL; - for (i=0;irng_type = rng_type_local; - q[i]->hptr = 0; /* This is reset to lval-1 before first iteration */ - // q[i]->si = (uint64 *) mymalloc((length-1)*sizeof(uint64)); - // q[i]->lags = (uint64 *) mymalloc(length*sizeof(uint64)); - q[i]->si = new uint64[length-1]; + q[i]->hptr = 0; /* This is reset to lval-1 before first iteration */ + q[i]->si = new uint64[length - 1]; q[i]->lags = new uint64[length]; q[i]->lval = length; q[i]->kval = valid[param_local].K; q[i]->parameter = param_local; q[i]->seed = seed_local; q[i]->init_seed = initseed_local; - q[i]->narrays=2; - q[i]->gentype = (char *)GENTYPE; - - if (q[i]->lags == NULL || q[i]->si == NULL) + q[i]->narrays = 2; + q[i]->gentype = (char*) GENTYPE; + + if (q[i]->lags == NULL || q[i]->si == NULL) return NULL; } -/* specify register fills and node number arrays */ -/* do fills in tree fashion so that all fills branch from index */ -/* contained in nstart array */ + /* specify register fills and node number arrays */ + /* do fills in tree fashion so that all fills branch from index */ + /* contained in nstart array */ q[0]->stream_number = lowword(nstart_local[0]); - get_fill(nstart_local,q[0]->lags,param_local,seed_local); - si_double(q[0]->si,nstart_local,length); + get_fill (nstart_local, q[0]->lags, param_local, seed_local); + si_double (q[0]->si, nstart_local, length); - set(ONE,mask); + set(ONE, mask); - for(m=0; mlags[m], &q[0]->lags[m]); + if (notzero(temp1)) + findseed (1, q[0]->lags[m], &q[0]->lags[m]); else - findseed(0,q[0]->lags[m], &q[0]->lags[m]); + findseed (0, q[0]->lags[m], &q[0]->lags[m]); - lshift(mask,1,mask); + lshift (mask, 1, mask); } - - add(q[0]->si[0],ONE,q[0]->si[0]); + add(q[0]->si[0], ONE, q[0]->si[0]); + i = 1; order[0] = 0; - if (ngen_local>1) - while (1) + if (ngen_local > 1) + while (1) { l = i; - for (k=0;ksi; - q[i]->stream_number = lowword(nindex[0]); - get_fill(nindex,q[i]->lags,param_local,seed_local); - si_double(nindex,nindex, length); - for (j=0;jsi[j]); + nindex = q[order[k]]->si; + q[i]->stream_number = lowword(nindex[0]); + get_fill (nindex, q[i]->lags, param_local, seed_local); + si_double (nindex, nindex, length); + for (j = 0; j < length - 1; j++) + set(nindex[j], q[i]->si[j]); - set(ONE,mask); + set(ONE, mask); - for(m=0; mlags[m], &q[i]->lags[m]); - else - findseed(0,q[i]->lags[m], &q[i]->lags[m]); + if (notzero(temp1)) + findseed (1, q[i]->lags[m], &q[i]->lags[m]); + else + findseed (0, q[i]->lags[m], &q[i]->lags[m]); - lshift(mask,1,mask); - } - - add(q[i]->si[0],ONE,q[i]->si[0]); + lshift (mask, 1, mask); + } - if (ngen_local == ++i) - break; + add(q[i]->si[0], ONE, q[i]->si[0]); + + if (ngen_local == ++i) + break; } - - if (ngen_local == i) - break; - - for (k=l-1;k>0;k--) + + if (ngen_local == i) + break; + + for (k = l - 1; k > 0; k--) { - order[2*k+1] = l+k; - order[2*k] = order[k]; + order[2 * k + 1] = l + k; + order[2 * k] = order[k]; } order[1] = l; } - free(order); + free (order); - for (i=ngen_local-1;i>=0;i--) + for (i = ngen_local - 1; i >= 0; i--) { k = 0; - for (j=1;jsi[j])) - k = 1; - if (!k) + for (j = 1; j < length - 1; j++) + if (notzero(q[i]->si[j])) + k = 1; + if (!k) break; - for (j=0;jadvance_state(); + for (j = 0; j < length * RUNUP; j++) + q[i]->advance_state (); } - while (i>=0) + while (i >= 0) { - for (j=0;j<4*length;j++) - q[i]->advance_state(); + for (j = 0; j < 4 * length; j++) + q[i]->advance_state (); i--; - } + } return q; } /* Initialize random number stream */ -MLFG::MLFG() +MLFG::MLFG () { rng_type = SPRNG_MLFG; gentype = NULL; @@ -577,57 +603,60 @@ seed = 0; } -int MLFG::init_rng(int gn, int tg, int s, int pa) +int MLFG::init_rng (int gn, int tg, int s, int pa) { -/* gives back one stream (node gennum) with updated spawning */ -/* info; should be called total_gen times, with different value */ -/* of gennum in [0,total_gen) each call */ - MLFG **p=NULL; - uint64 *nstart=NULL,*si_local; + /* gives back one stream (node gennum) with updated spawning */ + /* info; should be called total_gen times, with different value */ + /* of gennum in [0,total_gen) each call */ + MLFG **p = NULL; + uint64 *nstart = NULL, *si_local; int i, length, k; - + if (tg <= 0) /* Is total_gen valid ? */ { tg = 1; - fprintf(stderr,"WARNING - init_rng: Total_gen <= 0. Default value of 1 used for total_gen\n"); + fprintf (stderr, + "WARNING - init_rng: Total_gen <= 0. Default value of 1 used for total_gen\n"); } if (gn >= MAX_STREAMS) /* check if gen_num is valid */ - fprintf(stderr,"WARNING - init_rng: gennum: %d > maximum number of independent streams: %d\n\tIndependence of streams cannot be guranteed.\n", - gn, MAX_STREAMS); + fprintf (stderr, + "WARNING - init_rng: gennum: %d > maximum number of independent streams: %d\n\tIndependence of streams cannot be guranteed.\n", + gn, MAX_STREAMS); if (gn < 0 || gn >= tg) /* check if gen_num is valid */ { - fprintf(stderr,"ERROR - init_rng: gennum %d out of range [%d,%d).\n", gn, 0, tg); + fprintf (stderr, "ERROR - init_rng: gennum %d out of range [%d,%d).\n", + gn, 0, tg); return 0; } - s &= 0x7fffffff; /* Only 31 LSB of seed considered */ + s &= 0x7fffffff; /* Only 31 LSB of seed considered */ - if (pa < 0 || pa >= NPARAMS) /* check if parameter is valid */ + if (pa < 0 || pa >= NPARAMS) /* check if parameter is valid */ { - fprintf(stderr,"WARNING - init_rng: parameter not valid. Using Default parameter.\n"); + fprintf (stderr, + "WARNING - init_rng: parameter not valid. Using Default parameter.\n"); pa = 0; } - + length = valid[pa].L; /* determine parameters */ k = valid[pa].K; - + /* define the starting vector for the initial node */ - //` nstart = (uint64 *) mymalloc((length-1)*sizeof(uint64)); - nstart = new uint64[length-1]; + nstart = new uint64[length - 1]; if (nstart == NULL) return 0; - seti(gn,nstart[0]); + seti(gn, nstart[0]); - for (i=1;ikval; seed = p[0]->seed; - free(p); + free (p); } - -/* update si array to allow for future spawning of generators */ + + /* update si array to allow for future spawning of generators */ si_local = si; - while (lowword(si_local[0]) < tg && !highword(si_local[0])) - si_double(si_local,si_local,length); + while (lowword(si_local[0]) < tg && !highword(si_local[0])) + si_double (si_local, si_local, length); NGENS++; - + rng_type = 4; stream_number = gn; nstreams = tg; - - // array_sizes = (int *) mymalloc(narrays*sizeof(int)); - // arrays = (int **) mymalloc(narrays*sizeof(int *)); + array_sizes = new int[narrays]; - arrays = new int * [narrays]; + arrays = new int*[narrays]; - if(array_sizes == NULL || arrays == NULL) + if (array_sizes == NULL || arrays == NULL) return 0; - arrays[0] = (int *) lags; - arrays[1] = (int *) si; - array_sizes[0] = lval*sizeof(uint64)/sizeof(int); - array_sizes[1] = (lval-1)*sizeof(uint64)/sizeof(int); + arrays[0] = (int*) lags; + arrays[1] = (int*) si; + array_sizes[0] = lval * sizeof(uint64) / sizeof(int); + array_sizes[1] = (lval - 1) * sizeof(uint64) / sizeof(int); return 1; -} +} -MLFG::~MLFG() +MLFG::~MLFG () { - free_rng(); + free_rng (); } -MLFG::MLFG(const MLFG & c) +MLFG::MLFG (const MLFG &c) { rng_type = c.rng_type; gentype = c.gentype; @@ -701,10 +728,11 @@ seed = c.seed; } -MLFG & MLFG::operator= (const MLFG & c) +MLFG& MLFG::operator= (const MLFG &c) { - if (this != &c) { - this->free_rng(); + if (this != &c) + { + this->free_rng (); rng_type = c.rng_type; gentype = c.gentype; @@ -727,259 +755,238 @@ /* Returns a double precision random number */ -double MLFG::get_rn_dbl() +double MLFG::get_rn_dbl () { - advance_state(); - /*printf("\t sprng: %lu\n", lags[hptr]);*/ + advance_state (); #ifdef LONG64 return (lags[hptr]>>12)*TWO_M52; #else - return (lags[hptr][1])*TWO_M32 + (lags[hptr][0])*TWO_M64; + return (lags[hptr][1]) * TWO_M32 + (lags[hptr][0]) * TWO_M64; #endif -} +} /* Return a random integer */ -int MLFG::get_rn_int() +int MLFG::get_rn_int () { - advance_state(); + advance_state (); #ifdef LONG64 return lags[hptr]>>33; #else - return lags[hptr][1]>>1; + return lags[hptr][1] >> 1; #endif -} +} /* Return a single precision random number */ -float MLFG::get_rn_flt() +float MLFG::get_rn_flt () { /* If you have a more efficient way of computing the random integer, - then please replace the statement below with your scheme. */ + then please replace the statement below with your scheme. */ - return (float) get_rn_dbl(); + return (float) get_rn_dbl (); } - /*************************************************************************/ /*************************************************************************/ /* SPAWN_RNG: spawns new generators */ /*************************************************************************/ /*************************************************************************/ -int MLFG::spawn_rng(int nspawned, Sprng ***newgens) +int MLFG::spawn_rng (int nspawned, Sprng ***newgens) { - MLFG ** genptr; + MLFG **genptr; int i; uint64 *p; - + if (nspawned <= 0) /* is nspawned valid ? */ - { - nspawned = 1; - fprintf(stderr,"WARNING - spawn_rng: nspawned <= 0. Default value of 1 used for nspawned\n"); - } - + { + nspawned = 1; + fprintf (stderr, + "WARNING - spawn_rng: nspawned <= 0. Default value of 1 used for nspawned\n"); + } + p = si; - genptr = initialize(rng_type, nspawned,parameter,seed,p,init_seed); + genptr = initialize (rng_type, nspawned, parameter, seed, p, init_seed); - if(genptr == NULL) /* allocate memory for pointers to structures */ + if (genptr == NULL) /* allocate memory for pointers to structures */ { *newgens = NULL; return 0; } - - si_double(p,p,lval); - for(i=0; iarray_sizes = (int *) mymalloc(genptr[i]->narrays*sizeof(int)); // genptr[i]->arrays = (int **) mymalloc(genptr[i]->narrays*sizeof(int *)); genptr[i]->array_sizes = new int[genptr[i]->narrays]; - genptr[i]->arrays = new int * [genptr[i]->narrays]; + genptr[i]->arrays = new int*[genptr[i]->narrays]; - if(genptr[i]->array_sizes == NULL || genptr[i]->arrays == NULL) + if (genptr[i]->array_sizes == NULL || genptr[i]->arrays == NULL) return 0; - genptr[i]->arrays[0] = (int *)(genptr[i]->lags); - genptr[i]->arrays[1] = (int *)(genptr[i]->si); - genptr[i]->array_sizes[0] = genptr[i]->lval*sizeof(uint64)/sizeof(int); - genptr[i]->array_sizes[1] = (genptr[i]->lval-1)*sizeof(uint64)/sizeof(int); + genptr[i]->arrays[0] = (int*) (genptr[i]->lags); + genptr[i]->arrays[1] = (int*) (genptr[i]->si); + genptr[i]->array_sizes[0] = genptr[i]->lval * sizeof(uint64) + / sizeof(int); + genptr[i]->array_sizes[1] = (genptr[i]->lval - 1) * sizeof(uint64) + / sizeof(int); } - + NGENS += nspawned; - - *newgens = (Sprng **) genptr; + *newgens = (Sprng**) genptr; + return nspawned; } - /* Free memory allocated for data structure associated with stream */ -int MLFG::free_rng() +int MLFG::free_rng () { int i; - - assert(this != NULL); - for(i=0; i 0) + for (i = 0; i < narrays; i++) + delete[] arrays[i]; + + if (narrays > 0) { - delete [] array_sizes; - delete [] arrays; + delete[] array_sizes; + delete[] arrays; } - // free(this); NGENS--; return NGENS; } - - -int MLFG::pack_rng(char **buffer) +int MLFG::pack_rng (char **buffer) { unsigned char *p, *initp; int size, i; - size = 4 + 24+16*lval + strlen(gentype)+1; - - initp = p = (unsigned char *) mymalloc(size); /* allocate memory */ + size = 4 + 24 + 16 * lval + strlen (gentype) + 1; - if(p == NULL) + initp = p = (unsigned char*) mymalloc(size); /* allocate memory */ + + if (p == NULL) { *buffer = NULL; return 0; } - - p += store_int(rng_type,4,p); - /*strcpy((char *) p,gentype); - p += strlen(gentype)+1;*/ - //p += store_int(SPRNG_MLFG,4,p); - p += store_int(stream_number,4,p); - p += store_int(nstreams,4,p); - p += store_int(init_seed,4,p); - p += store_int(parameter,4,p); - p += store_int(hptr,4,p); - p += store_int(lval,4,p); - p += store_int(kval,4,p); - p += store_int(seed,4,p); - p += store_uint64array(si,lval-1,p); - p += store_uint64array(lags,lval,p); - - *buffer = (char *) initp; - assert(p-initp == size); - - return p-initp; -} + p += store_int (rng_type, 4, p); + p += store_int (stream_number, 4, p); + p += store_int (nstreams, 4, p); + p += store_int (init_seed, 4, p); + p += store_int (parameter, 4, p); + p += store_int (hptr, 4, p); + p += store_int (lval, 4, p); + p += store_int (kval, 4, p); + p += store_int (seed, 4, p); + p += store_uint64array (si, lval - 1, p); + p += store_uint64array (lags, lval, p); -int MLFG::unpack_rng(char *packed) + *buffer = (char*) initp; + assert (p - initp == size); + + return p - initp; +} + +int MLFG::unpack_rng (char *packed) { unsigned char *p; int i, found; - /*if(this == NULL) - return 0;*/ + + p = (unsigned char*) packed; + p += load_int (p, 4, (unsigned int*) &rng_type); - p = (unsigned char *) packed; - p += load_int(p,4,(unsigned int *)&rng_type); - - /*if(strcmp((char *) p,GENTYPE) != 0) + if (rng_type != SPRNG_MLFG) { - fprintf(stderr,"ERROR: Unpacked ' %.24s ' instead of ' %s '\n", p, GENTYPE); + fprintf (stderr, "ERROR: Unpacked ' %d ' instead of ' %d '\n", rng_type, + SPRNG_MLFG); return 0; } - else - gentype = (char *)GENTYPE; + p += load_int (p, 4, (unsigned int*) &stream_number); + p += load_int (p, 4, (unsigned int*) &nstreams); + p += load_int (p, 4, (unsigned int*) &init_seed); + p += load_int (p, 4, (unsigned int*) ¶meter); + p += load_int (p, 4, (unsigned int*) &hptr); + p += load_int (p, 4, (unsigned int*) &lval); + p += load_int (p, 4, (unsigned int*) &kval); + p += load_int (p, 4, (unsigned int*) &seed); - p += strlen(gentype)+1; */ - - if (rng_type != SPRNG_MLFG) { - fprintf(stderr,"ERROR: Unpacked ' %d ' instead of ' %d '\n", rng_type, SPRNG_MLFG); - return 0; - } - p += load_int(p,4,(unsigned int *)&stream_number); - p += load_int(p,4,(unsigned int *)&nstreams); - p += load_int(p,4,(unsigned int *)&init_seed); - p += load_int(p,4,(unsigned int *)¶meter); - p += load_int(p,4,(unsigned int *)&hptr); - p += load_int(p,4,(unsigned int *)&lval); - p += load_int(p,4,(unsigned int *)&kval); - p += load_int(p,4,(unsigned int *)&seed); - -/* check values of parameters for consistency */ - for(i=found=0; i. * -************************************************************************************/ + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/SRC/mlfg/mlfg.cpp~ sprng5/SRC/mlfg/mlfg.cpp~ --- sprng5.orig/SRC/mlfg/mlfg.cpp~ 2008-04-09 06:47:56.000000000 +0000 +++ sprng5/SRC/mlfg/mlfg.cpp~ 1970-01-01 00:00:00.000000000 +0000 @@ -1,964 +0,0 @@ -/*************************************************************************/ -/*************************************************************************/ -/* Parallel Multiplicative Lagged Fibonacci Generator */ -/* */ -/* Modifed by: J. Ren */ -/* Florida State University */ -/* Email: ren@csit.fsu.edu */ -/* */ -/* Based on the implementation by: */ -/* Ashok Srinivasan (1997) */ -/*************************************************************************/ -/*************************************************************************/ - -#include -#include -#include -#include -#include -#define NDEBUG -#include -#include "memory.h" -#include "sprng.h" -#include "mlfg.h" -#include "store.h" - -#define MAX_STREAMS mlfg_MAX_STREAMS -#define NGENS mlfg_NGENS -#define valid mlfg_valid - -#define VERSION "00" -/*** Name for Generator ***/ -#define GENTYPE VERSION "Multiplicative Lagged Fibonacci Generator" - -#define NPARAMS 11 /* number of valid parameters */ -int MAX_STREAMS = 0x7fffffff; /* Maximum number streams to init_sprng */ - -struct vstruct { - int L; - int K; - int LSBS; /* number of least significant bits that are 1 */ - int first; /* the first seed whose LSB is 1 */ -}; - -const struct vstruct valid[] = { {17,5,1,10}, {31,6,1,2}, -{55,24,1,11}, {63,31,1,14}, {127,97,1,21}, {521,353,1,100}, -{521,168,1,83}, {607,334,1,166}, {607,273,1,105}, {1279,418,1,208}, {1279,861,1,233} }; - - -/* int64.h (START) */ - -#if LONG_MAX > 2147483647L -#if LONG_MAX > 35184372088831L -#if LONG_MAX >= 9223372036854775807L -#define LONG_SPRNG -#define LONG64 long /* 64 bit long */ -#endif -#endif -#endif - -#if !defined(LONG_SPRNG) && defined(_LONG_LONG) -#define LONG64 long long -#endif - - -#ifdef LONG64 - -typedef unsigned LONG64 uint64; - -#ifdef LONG_SPRNG -#define MINUS1 0xffffffffffffffffUL /* -1 (mod 2^(BITS-2)) */ -#define ONE 0x1UL -#define MASK64 0xffffffffffffffffUL -#else -#define MINUS1 0xffffffffffffffffULL /* -1 (mod 2^(BITS-2)) */ -#define ONE 0x1ULL -#define MASK64 0xffffffffffffffffULL -#endif - -#define multiply(a,b,c) {c = (a)*(b); c &= MASK64;} -#define add(a,b,c) {c = (a)+(b); c &= MASK64;} -#define decrement(a,c) {c = (a)-1; c &= MASK64;} -#define And(a,b,c) {c = (a)&(b);} -#define Or(a,b,c) {c = (a)|(b);} -#define Xor(a,b,c) {c = (a)^(b);} -#define notzero(a) (a==0?0:1) -#define lshift(a,b,c) {c = (a)<<(b); c &= MASK64;} /* b is an int */ -#define rshift(a,b,c) {c = (a)>>(b); c &= MASK64;} /* b is an int */ -#define highword(a) ((unsigned int)((a)>>32)) -#define lowword(a) ((unsigned int)((a)&0xffffffff)) -#define set(a,b) {b = (a)&MASK64;} -#define seti(a,b) {b = (a)&MASK64;} /* b is an int */ -#define seti2(a,b,c) {c = (b); c <<= 32; c |= (a); c &= MASK64;}/*a,b=+int*/ - -#else /* Simulate 64 bit arithmetic on 32 bit integers */ - -typedef unsigned int uint64[2]; - -static const uint64 MASK64={0xffffffffU,0xffffffffU}; -static const uint64 MINUS1={0xffffffffU,0xffffffffU}; /* -1 (mod 2^(BITS-2)) */ -static uint64 ONE={0x1U,0x0U}; -#define TWO_M32 2.3283064365386962e-10 /* 2^(-32) */ - -#define And(a,b,c) {c[0] = a[0]&b[0]; c[1] = a[1]&b[1];} -#define Or(a,b,c) {c[0] = a[0]|b[0]; c[1] = a[1]|b[1];} -#define Xor(a,b,c) {c[0] = a[0]^b[0]; c[1] = a[1]^b[1];} -#define notzero(a) ((a[0]==0 && a[1]==0)?0:1) -#define multiply(a,b,c) {c[1] = a[0]*b[1]+a[1]*b[0];\ - c[1] += (unsigned int) (((double)a[0]*(double)b[0])\ - *TWO_M32);\ - c[0] = a[0]*b[0]; And(c,MASK64,c);} -#define add(a,b,c) {unsigned int t = a[0]+b[0]; \ - c[1] = a[1]+b[1]+(t>(32-b)); c[0] = a[0]<<(b);} - else {c[1]=a[0]<<(b-32);c[0]=0;} - And(c,MASK64,c); -} - -static void rshift(uint64 a,int b,uint64 c) -{ - if(b<32) - {c[0] = (a[0]>>b)|(a[1]<<(32-b));c[1] = a[1]>>(b);} - else {c[0]=a[1]>>(b-32);c[1]=0;} - And(c,MASK64,c); -} - -#define highword(a) ((a)[1]) -#define lowword(a) ((a)[0]) -#define set(a,b) {b[0] = a[0];b[1]=a[1];And(b,MASK64,b);} -#define seti(a,b) {b[0] = a;b[1]=0;} /* b is an int */ -#define seti2(a,b,c) {c[1] = b; c[0] = a; And(c,MASK64,c);}/*a,b = +ve int*/ - -#endif /* LONG64 or 32 bit */ - - -static int store_uint64(uint64 l, unsigned char *c) -{ - int i; - unsigned int m[2]; - - m[0] = highword(l); - m[1] = lowword(l); - - c += store_intarray(m,2,4,c); - - return 8; /* return number of chars filled */ -} - - -static int store_uint64array(uint64 *l, int n, unsigned char *c) -{ - int i; - - for(i=0; i>(64-BITS)) -#define INT_MASK (MASK64>>(64-BITS+1)) -#define INTX2_MASK ((((uint64)1)<=0;i--) - { - new_fill[0] = (new_fill[0]<<1) | (1&bitcnt(reg_fill[0]&temp)); - new_fill[1] = (new_fill[1]<<1) | (1&bitcnt(reg_fill[1]&temp)); - temp >>= 1; - } - - for (i=28;i<32;i++) - { - temp = bitcnt(reg_fill[0]&(mask<>(32-i))); - new_fill[0] |= (1&temp)<=0;i--) - { - And(b[i],mask1,temp1); - - if(notzero(temp1)) - add(a[i+1],ONE,a[i+1]); - - And(b[i],INTX2_MASK,temp1); - lshift(temp1,1,a[i]); - } -} - -static void pow3(uint64 n, uint64 *ui) /* return 3^n (mod 2^BITS) */ -{ - uint64 p, value, temp, bit, temp2, temp3; - int exponent; - - set(n,p); - seti(3,temp); - seti(1,temp3); - And(n,temp3,temp2); - - if (notzero(temp2)) { - seti(3,value); - } - else { - seti(1,value); - } - - seti(1,bit); - - for(exponent=2; exponent<64; exponent++) - { - multiply(temp,temp,temp); - lshift(bit,1,bit); - - And(bit,n,temp2); - if(notzero(temp2)) - multiply(value,temp,value); - } - - And(value,MASK64,value); - - set(value,(*ui)); -} - -static void findseed(int sign, uint64 n, uint64 *ui) -{ - uint64 temp; - - pow3(n,&temp); - - if(sign&1) - multiply(temp,MINUS1,temp); - - set(temp,(*ui)); -} - -void MLFG::advance_state() -{ - int lv = lval, kv = kval; - int lptr; - hptr--; - - if(hptr < 0) - hptr = lv-1; - - lptr = hptr + kv; - - if (lptr>=lv) - lptr -= lv; - - multiply(lags[hptr],lags[lptr],lags[hptr]); -} - -static MLFG** initialize(int rng_type_local, int ngen_local, int param_local, - unsigned int seed_local, uint64 *nstart_local, - unsigned int initseed_local) -{ - int i,j,k,l,m,*order, length; - MLFG ** q; - uint64 *nindex, temp1, mask; - - length = valid[param_local].L; - - // order = (int *) mymalloc(ngen_local*sizeof(int)); - // q = (MLFG **) mymalloc(ngen_local*sizeof(MLFG *)); - order = new int[ngen_local]; - q = new MLFG * [ngen_local]; - - if (q == NULL || order == NULL) - return NULL; - - for (i=0;irng_type = rng_type_local; - q[i]->hptr = 0; /* This is reset to lval-1 before first iteration */ - // q[i]->si = (uint64 *) mymalloc((length-1)*sizeof(uint64)); - // q[i]->lags = (uint64 *) mymalloc(length*sizeof(uint64)); - q[i]->si = new uint64[length-1]; - q[i]->lags = new uint64[length]; - q[i]->lval = length; - q[i]->kval = valid[param_local].K; - q[i]->parameter = param_local; - q[i]->seed = seed_local; - q[i]->init_seed = initseed_local; - q[i]->narrays=2; - q[i]->gentype = GENTYPE; - - if (q[i]->lags == NULL || q[i]->si == NULL) - return NULL; - } -/* specify register fills and node number arrays */ -/* do fills in tree fashion so that all fills branch from index */ -/* contained in nstart array */ - q[0]->stream_number = lowword(nstart_local[0]); - get_fill(nstart_local,q[0]->lags,param_local,seed_local); - si_double(q[0]->si,nstart_local,length); - - set(ONE,mask); - - for(m=0; mlags[m], &q[0]->lags[m]); - else - findseed(0,q[0]->lags[m], &q[0]->lags[m]); - - lshift(mask,1,mask); - } - - add(q[0]->si[0],ONE,q[0]->si[0]); - - i = 1; - order[0] = 0; - - if (ngen_local>1) - while (1) - { - l = i; - for (k=0;ksi; - q[i]->stream_number = lowword(nindex[0]); - get_fill(nindex,q[i]->lags,param_local,seed_local); - si_double(nindex,nindex, length); - for (j=0;jsi[j]); - - set(ONE,mask); - - for(m=0; mlags[m], &q[i]->lags[m]); - else - findseed(0,q[i]->lags[m], &q[i]->lags[m]); - - lshift(mask,1,mask); - } - - add(q[i]->si[0],ONE,q[i]->si[0]); - - if (ngen_local == ++i) - break; - } - - if (ngen_local == i) - break; - - for (k=l-1;k>0;k--) - { - order[2*k+1] = l+k; - order[2*k] = order[k]; - } - order[1] = l; - } - - free(order); - - for (i=ngen_local-1;i>=0;i--) - { - k = 0; - for (j=1;jsi[j])) - k = 1; - if (!k) - break; - for (j=0;jadvance_state(); - } - - while (i>=0) - { - for (j=0;j<4*length;j++) - q[i]->advance_state(); - i--; - } - - return q; -} - -/* Initialize random number stream */ - -MLFG::MLFG() -{ - rng_type = 4; - gentype = NULL; - stream_number = 0; - nstreams = 0; - init_seed = 0; - parameter = 0; - narrays = 0; - array_sizes = NULL; - arrays = NULL; - lags = NULL; - si = NULL; - hptr = 0; - lval = 0; - kval = 0; - seed = 0; -} - -int MLFG::init_rng(int gn, int tg, int s, int pa) -{ -/* gives back one stream (node gennum) with updated spawning */ -/* info; should be called total_gen times, with different value */ -/* of gennum in [0,total_gen) each call */ - MLFG **p=NULL; - uint64 *nstart=NULL,*si_local; - int i, length, k; - - if (tg <= 0) /* Is total_gen valid ? */ - { - tg = 1; - fprintf(stderr,"WARNING - init_rng: Total_gen <= 0. Default value of 1 used for total_gen\n"); - } - - if (gn >= MAX_STREAMS) /* check if gen_num is valid */ - fprintf(stderr,"WARNING - init_rng: gennum: %d > maximum number of independent streams: %d\n\tIndependence of streams cannot be guranteed.\n", - gn, MAX_STREAMS); - - if (gn < 0 || gn >= tg) /* check if gen_num is valid */ - { - fprintf(stderr,"ERROR - init_rng: gennum %d out of range [%d,%d).\n", gn, 0, tg); - return 0; - } - - s &= 0x7fffffff; /* Only 31 LSB of seed considered */ - - if (pa < 0 || pa >= NPARAMS) /* check if parameter is valid */ - { - fprintf(stderr,"WARNING - init_rng: parameter not valid. Using Default parameter.\n"); - pa = 0; - } - - length = valid[pa].L; /* determine parameters */ - k = valid[pa].K; - - /* define the starting vector for the initial node */ - //` nstart = (uint64 *) mymalloc((length-1)*sizeof(uint64)); - nstart = new uint64[length-1]; - - if (nstart == NULL) - return 0; - - seti(gn,nstart[0]); - - for (i=1;irng_type; - gentype = p[0]->gentype; - stream_number = p[0]->stream_number; - nstreams = p[0]->nstreams; - init_seed = p[0]->init_seed; - parameter = p[0]->parameter; - narrays = p[0]->narrays; - arrays = p[0]->arrays; - lags = p[0]->lags; - si = p[0]->si; - hptr = p[0]->hptr; - lval = p[0]->lval; - kval = p[0]->kval; - seed = p[0]->seed; - - free(p); - } - -/* update si array to allow for future spawning of generators */ - si_local = si; - - while (lowword(si_local[0]) < tg && !highword(si_local[0])) - si_double(si_local,si_local,length); - - NGENS++; - - rng_type = 4; - stream_number = gn; - nstreams = tg; - - // array_sizes = (int *) mymalloc(narrays*sizeof(int)); - // arrays = (int **) mymalloc(narrays*sizeof(int *)); - array_sizes = new int[narrays]; - arrays = new int * [narrays]; - - if(array_sizes == NULL || arrays == NULL) - return 0; - - arrays[0] = (int *) lags; - arrays[1] = (int *) si; - array_sizes[0] = lval*sizeof(uint64)/sizeof(int); - array_sizes[1] = (lval-1)*sizeof(uint64)/sizeof(int); - - return 1; -} - -MLFG::~MLFG() -{ - free_rng(); -} - -MLFG::MLFG(const MLFG & c) -{ - rng_type = c.rng_type; - gentype = c.gentype; - stream_number = c.stream_number; - nstreams = c.nstreams; - init_seed = c.init_seed; - parameter = c.parameter; - narrays = c.narrays; - array_sizes = c.array_sizes; - arrays = c.arrays; - lags = c.lags; - si = c.si; - hptr = c.hptr; - lval = c.lval; - kval = c.kval; - seed = c.seed; -} - -MLFG & MLFG::operator= (const MLFG & c) -{ - if (this != &c) { - this->free_rng(); - - rng_type = c.rng_type; - gentype = c.gentype; - stream_number = c.stream_number; - nstreams = c.nstreams; - init_seed = c.init_seed; - parameter = c.parameter; - narrays = c.narrays; - array_sizes = c.array_sizes; - arrays = c.arrays; - lags = c.lags; - si = c.si; - hptr = c.hptr; - lval = c.lval; - kval = c.kval; - seed = c.seed; - } -} - -/* Returns a double precision random number */ - -double MLFG::get_rn_dbl() -{ - advance_state(); - /*printf("\t sprng: %lu\n", lags[hptr]);*/ -#ifdef LONG64 - return (lags[hptr]>>12)*TWO_M52; -#else - return (lags[hptr][1])*TWO_M32 + (lags[hptr][0])*TWO_M64; -#endif -} - -/* Return a random integer */ - -int MLFG::get_rn_int() -{ - advance_state(); - -#ifdef LONG64 - return lags[hptr]>>33; -#else - return lags[hptr][1]>>1; -#endif -} - -/* Return a single precision random number */ - -float MLFG::get_rn_flt() -{ - /* If you have a more efficient way of computing the random integer, - then please replace the statement below with your scheme. */ - - return (float) get_rn_dbl(); -} - - -/*************************************************************************/ -/*************************************************************************/ -/* SPAWN_RNG: spawns new generators */ -/*************************************************************************/ -/*************************************************************************/ - -int MLFG::spawn_rng(int nspawned, Sprng ***newgens) -{ - MLFG ** genptr; - int i; - uint64 *p; - - if (nspawned <= 0) /* is nspawned valid ? */ - { - nspawned = 1; - fprintf(stderr,"WARNING - spawn_rng: nspawned <= 0. Default value of 1 used for nspawned\n"); - } - - p = si; - - genptr = initialize(rng_type, nspawned,parameter,seed,p,init_seed); - - if(genptr == NULL) /* allocate memory for pointers to structures */ - { - *newgens = NULL; - return 0; - } - - si_double(p,p,lval); - - for(i=0; iarray_sizes = (int *) mymalloc(genptr[i]->narrays*sizeof(int)); - // genptr[i]->arrays = (int **) mymalloc(genptr[i]->narrays*sizeof(int *)); - genptr[i]->array_sizes = new int[genptr[i]->narrays]; - genptr[i]->arrays = new int * [genptr[i]->narrays]; - - if(genptr[i]->array_sizes == NULL || genptr[i]->arrays == NULL) - return 0; - - genptr[i]->arrays[0] = (int *)(genptr[i]->lags); - genptr[i]->arrays[1] = (int *)(genptr[i]->si); - genptr[i]->array_sizes[0] = genptr[i]->lval*sizeof(uint64)/sizeof(int); - genptr[i]->array_sizes[1] = (genptr[i]->lval-1)*sizeof(uint64)/sizeof(int); - } - - NGENS += nspawned; - - *newgens = (Sprng **) genptr; - - return nspawned; -} - - -/* Free memory allocated for data structure associated with stream */ - -int MLFG::free_rng() -{ - int i; - - assert(this != NULL); - - for(i=0; i 0) - { - delete [] array_sizes; - delete [] arrays; - } - - // free(this); - NGENS--; - - return NGENS; -} - - - -int MLFG::pack_rng(char **buffer) -{ - unsigned char *p, *initp; - int size, i; - - size = 4 + 24+16*lval + strlen(gentype)+1; - - initp = p = (unsigned char *) mymalloc(size); /* allocate memory */ - - if(p == NULL) - { - *buffer = NULL; - return 0; - } - - p += store_int(rng_type,4,p); - strcpy((char *) p,gentype); - p += strlen(gentype)+1; - p += store_int(stream_number,4,p); - p += store_int(nstreams,4,p); - p += store_int(init_seed,4,p); - p += store_int(parameter,4,p); - p += store_int(hptr,4,p); - p += store_int(lval,4,p); - p += store_int(kval,4,p); - p += store_int(seed,4,p); - p += store_uint64array(si,lval-1,p); - p += store_uint64array(lags,lval,p); - - *buffer = (char *) initp; - assert(p-initp == size); - - return p-initp; -} - - -int MLFG::unpack_rng(char *packed) -{ - unsigned char *p; - int i, found; - - if(this == NULL) - return 0; - - p = (unsigned char *) packed; - p += load_int(p,4,(unsigned int *)&rng_type); - - if(strcmp((char *) p,GENTYPE) != 0) - { - fprintf(stderr,"ERROR: Unpacked ' %.24s ' instead of ' %s '\n", p, GENTYPE); - return 0; - } - else - gentype = GENTYPE; - - p += strlen(gentype)+1; - p += load_int(p,4,(unsigned int *)&stream_number); - p += load_int(p,4,(unsigned int *)&nstreams); - p += load_int(p,4,(unsigned int *)&init_seed); - p += load_int(p,4,(unsigned int *)¶meter); - p += load_int(p,4,(unsigned int *)&hptr); - p += load_int(p,4,(unsigned int *)&lval); - p += load_int(p,4,(unsigned int *)&kval); - p += load_int(p,4,(unsigned int *)&seed); - -/* check values of parameters for consistency */ - for(i=found=0; i. * -************************************************************************************/ +/*********************************************************************************** + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/SRC/pmlcg/Makefile.in sprng5/SRC/pmlcg/Makefile.in --- sprng5.orig/SRC/pmlcg/Makefile.in 2018-07-21 19:48:26.000000000 +0000 +++ sprng5/SRC/pmlcg/Makefile.in 2021-06-08 16:40:20.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -226,6 +226,7 @@ MKDIR_P = @MKDIR_P@ MPICXX = @MPICXX@ MPIF77 = @MPIF77@ +MPI_CXXLIB = @MPI_CXXLIB@ MPI_DEF = @MPI_DEF@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ diff -urN sprng5.orig/SRC/pmlcg/basic.h sprng5/SRC/pmlcg/basic.h --- sprng5.orig/SRC/pmlcg/basic.h 2014-08-25 17:58:33.000000000 +0000 +++ sprng5/SRC/pmlcg/basic.h 2021-04-08 18:16:47.000000000 +0000 @@ -8,7 +8,8 @@ #define LINEAR_SEARCH_LIMIT 5000 #define MOST 18 -typedef struct DATATYPE1 { +typedef struct DATATYPE1 +{ long power; BigNum *valid; struct BIGNUM_ARRAY_TYPE denom; @@ -18,23 +19,22 @@ BigRat *magic; } REL_PRIME_TABLE; - -void free_bn_array(struct BIGNUM_ARRAY_TYPE *array) +void free_bn_array (struct BIGNUM_ARRAY_TYPE *array) { long i; - - for(i=0; isize; i++) - (array->list[i]).b_clear(); - - delete [] array->list; -} + for (i = 0; i < array->size; i++) + (array->list[i]).b_clear (); + delete[] array->list; +} + /* This function merges two arrays */ -extern struct BIGNUM_ARRAY_TYPE join(struct BIGNUM_ARRAY_TYPE first, struct BIGNUM_ARRAY_TYPE second) +extern struct BIGNUM_ARRAY_TYPE join (struct BIGNUM_ARRAY_TYPE first, + struct BIGNUM_ARRAY_TYPE second) { struct BIGNUM_ARRAY_TYPE result; - long count1 = 0; + long count1 = 0; long count2 = 0; BigNum absfirst, abssecond; @@ -42,42 +42,46 @@ // result.list = static_cast(malloc(result.size * sizeof(BigNum))); result.list = new BigNum[result.size]; - if ((count1 < first.size) && (count2 < second.size)) { - absfirst = b_abs(first.list[count1]); - abssecond = b_abs(second.list[count2]); + if ((count1 < first.size) && (count2 < second.size)) + { + absfirst = b_abs (first.list[count1]); + abssecond = b_abs (second.list[count2]); } - while ((count1 < first.size) && (count2 < second.size)) { - if (b_cmp(absfirst, abssecond) > 0) { - result.list[count1+count2] = second.list[count2]; + while ((count1 < first.size) && (count2 < second.size)) + { + if (b_cmp (absfirst, abssecond) > 0) + { + result.list[count1 + count2] = second.list[count2]; ++count2; - if (count2 < second.size) - abssecond = b_abs(second.list[count2]); + if (count2 < second.size) + abssecond = b_abs (second.list[count2]); } - else { - result.list[count1+count2] = first.list[count1]; + else + { + result.list[count1 + count2] = first.list[count1]; ++count1; if (count1 < first.size) - absfirst = b_abs(first.list[count1]); + absfirst = b_abs (first.list[count1]); } } - absfirst.b_clear(); - abssecond.b_clear(); + absfirst.b_clear (); + abssecond.b_clear (); - for (;count1(malloc(size * sizeof(BigNum))); result.list = new BigNum[size]; - for (count=0;count 0) { - result.list[count2] = Set_ui(0ul); + if (set.size > 0) + { + result.list[count2] = Set_ui (0ul); - for (count=0;count 1) - oldones = find_denom(&(the_primes[1]), maxsize-1, limit); - else { - oldones.size = 1; - // oldones.list = static_cast(malloc(sizeof(BigNum))); - oldones.list = new BigNum[1]; - oldones.list[0] = Set_ui(1ul); - } + oldones = find_denom (&(the_primes[1]), maxsize - 1, limit); + else + { + oldones.size = 1; + oldones.list = new BigNum[1]; + oldones.list[0] = Set_ui (1ul); + } - newones = mult_reduce(the_primes, oldones, limit); - answer = join(oldones, newones); - - free_bn_array(&newones); - free_bn_array(&oldones); + newones = mult_reduce (the_primes, oldones, limit); + answer = join (oldones, newones); - return(answer); + free_bn_array (&newones); + free_bn_array (&oldones); + + return (answer); } /* Evaluates Mu function, given denominators */ -extern void mu_eval(BigNum * result, BigNum * x, struct BIGNUM_ARRAY_TYPE denominators) +extern void mu_eval (BigNum *result, BigNum *x, + struct BIGNUM_ARRAY_TYPE denominators) { BigNum val; long count = 0; - *result = Set_ui(0ul); - val = Set_ui(1ul); + *result = Set_ui (0ul); + val = Set_ui (1ul); - while ((count < denominators.size) && (b_cmp(val, static_cast(0)) != 0)) { - val = *x / denominators.list[count]; - *result = *result + val; - count++; - } + while ((count < denominators.size) + && (b_cmp (val, static_cast (0)) != 0)) + { + val = *x / denominators.list[count]; + *result = *result + val; + count++; + } - val.b_clear(); + val.b_clear (); } /* Checks if x == 0 mod y, returns true if so */ -extern short divisible(BigNum * x, BigNum * y) +extern short divisible (BigNum *x, BigNum *y) { - return (*x % *y == static_cast(0)); + return (*x % *y == static_cast (0)); } /* Checks if any primes divide a number */ -extern short any_divide(BigNum * number, BigNum * the_primes, long no_of_primes) +extern short any_divide (BigNum *number, BigNum *the_primes, long no_of_primes) { - if (no_of_primes == 1) { - return(divisible(number, &(the_primes[0]))); + if (no_of_primes == 1) + { + return (divisible (number, &(the_primes[0]))); } - else { - if (divisible(number, &(the_primes[no_of_primes-1]))) { - return(1); + else + { + if (divisible (number, &(the_primes[no_of_primes - 1]))) + { + return (1); } - else { - return(any_divide(number, the_primes, no_of_primes - 1)); + else + { + return (any_divide (number, the_primes, no_of_primes - 1)); } } } -extern void incr(BigNum * x, long num) +extern void incr (BigNum *x, long num) { *x = *x + num; } -extern void decr(BigNum * x, long num) +extern void decr (BigNum *x, long num) { *x = *x - num; } /* Uses a linear search to find inverse value given guess, mu(guess) */ -extern BigNum linear_find(BigNum * y, BigNum * current_mu, BigNum * guess, struct BIGNUM_ARRAY_TYPE the_primes) +extern BigNum linear_find (BigNum *y, BigNum *current_mu, BigNum *guess, + struct BIGNUM_ARRAY_TYPE the_primes) { - while (b_cmp(*current_mu, *y) < 0) { - incr(guess, 1L); - // cout << *y << *current_mu << *guess; - - if (any_divide(guess, the_primes.list, the_primes.size)) { + while (b_cmp (*current_mu, *y) < 0) + { + incr (guess, 1L); + + //redid this to eliminate an empty if branch + if (!any_divide (guess, the_primes.list, the_primes.size)) + { + incr (current_mu, 1L); } - else { - incr(current_mu, 1L); - } } - while (b_cmp(*current_mu, *y) > 0) { - if (any_divide(guess, the_primes.list, the_primes.size)) - decr(guess, 1L); - else { - decr(guess, 1L); - decr(current_mu, 1L); + while (b_cmp (*current_mu, *y) > 0) + { + if (any_divide (guess, the_primes.list, the_primes.size)) + decr (guess, 1L); + else + { + decr (guess, 1L); + decr (current_mu, 1L); } } - while (any_divide(guess, the_primes.list, the_primes.size)) { - decr(guess, 1L); + while (any_divide (guess, the_primes.list, the_primes.size)) + { + decr (guess, 1L); } - - return(*guess); + + return (*guess); } /* This guesses at mu_inverse */ -extern BigNum guess_mu_inverse(BigNum * y, BigRat * magic) +extern BigNum guess_mu_inverse (BigNum *y, BigRat *magic) { BigNum temp, guess; - temp = magic->br_get_num(); + temp = magic->br_get_num (); guess = (*y) * temp; - temp = magic->br_get_den(); + temp = magic->br_get_den (); guess = guess / temp; - temp.b_clear(); - - return(guess); -} + temp.b_clear (); + return (guess); +} /* Efficient caluculation of mu */ -extern void Mu(BigNum * result, BigNum * x, struct BIGNUM_ARRAY_TYPE left_to_kill, struct BIGNUM_ARRAY_TYPE the_final_denom) +extern void Mu (BigNum *result, BigNum *x, + struct BIGNUM_ARRAY_TYPE left_to_kill, + struct BIGNUM_ARRAY_TYPE the_final_denom) { BigNum subout, first, second; struct BIGNUM_ARRAY_TYPE new_kill; - if (left_to_kill.size <= 0) { - mu_eval(result, x, the_final_denom); + if (left_to_kill.size <= 0) + { + mu_eval (result, x, the_final_denom); } - else { + else + { subout = (*x) / left_to_kill.list[0]; new_kill.size = left_to_kill.size - 1; new_kill.list = &(left_to_kill.list[1]); - Mu(&first, x, new_kill, the_final_denom); - Mu(&second, &subout, new_kill, the_final_denom); + Mu (&first, x, new_kill, the_final_denom); + Mu (&second, &subout, new_kill, the_final_denom); *result = first - second; - first.b_clear(); - second.b_clear(); - subout.b_clear(); + first.b_clear (); + second.b_clear (); + subout.b_clear (); } } /* finds the desired result, given y, the primes to be killed, the denominators, - the full set of initial primes, and the density of relative primes */ -extern BigNum find_M(BigNum * guess, BigNum * y, struct BIGNUM_ARRAY_TYPE left_to_kill, - struct BIGNUM_ARRAY_TYPE denom, struct BIGNUM_ARRAY_TYPE initial_primes, - BigRat *magic) + the full set of initial primes, and the density of relative primes */ +extern BigNum find_M (BigNum *guess, BigNum *y, + struct BIGNUM_ARRAY_TYPE left_to_kill, + struct BIGNUM_ARRAY_TYPE denom, + struct BIGNUM_ARRAY_TYPE initial_primes, BigRat *magic) { BigNum temp, temp2, current_mu; @@ -292,7 +314,8 @@ temp = y - current_mu; temp2 = b_abs(temp); - while (b_cmp(temp2, LINEAR_SEARCH_LIMIT) > 0) { + while (b_cmp(temp2, LINEAR_SEARCH_LIMIT) > 0) + { temp2 = guess_mu_inverse(&temp, magic); (*guess) = (*guess) + temp2; @@ -307,20 +330,20 @@ #else - *guess = Set_ui(11ul); - current_mu = Set_ui(1ul); + *guess = Set_ui (11ul); + current_mu = Set_ui (1ul); #endif - return(linear_find(y, ¤t_mu, guess, initial_primes)); -} + return (linear_find (y, ¤t_mu, guess, initial_primes)); +} /* setup. Note: 'int param' must be another argument if modulii other than 2^61-1 will be used */ -extern void init_rel_prime(REL_PRIME_TABLE * data, BigNum * maxval) +extern void init_rel_prime (REL_PRIME_TABLE *data, BigNum *maxval) { /* modified by cmdavis */ BigNum limit, num, denom; struct BIGNUM_ARRAY_TYPE the_primes; - - /* initialize 'data.power' */ + + /* initialize 'data.power' */ (*data).power = POWER_N; /* initialize 'data.valid' */ @@ -329,70 +352,72 @@ /* initialize 'data.prim' */ (*data).prim = new BigNum[1]; - *((*data).prim) = Set_ui(PRIM); + *((*data).prim) = Set_ui (PRIM); /* initialize 'data.magic' (density of relative primes) */ (*data).magic = new BigRat[1]; - num = (char *)MAGIC_NUM; - denom = (char *)MAGIC_DEN; - (*((*data).magic)).br_set_num(num); - (*((*data).magic)).br_set_den(denom); + num = (char*) MAGIC_NUM; + denom = (char*) MAGIC_DEN; + (*((*data).magic)).br_set_num (num); + (*((*data).magic)).br_set_den (denom); /* initialize 'data.the_primes[]' */ - (*data).the_primes = init_factors(); + (*data).the_primes = init_factors (); - /* initialize 'data.kill_us[]' */ + /* initialize 'data.kill_us[]' */ (*data).kill_us.size = (*data).the_primes.size - MOST; - if ((*data).kill_us.size < 0) + if ((*data).kill_us.size < 0) (*data).kill_us.size = 0; (*data).kill_us.list = (*data).the_primes.list; - - /* initialize 'data.denom[]' */ - the_primes = minus(&((*data).the_primes.list[(*data).kill_us.size]), - (*data).the_primes.size - (*data).kill_us.size); + /* initialize 'data.denom[]' */ + the_primes = minus (&((*data).the_primes.list[(*data).kill_us.size]), + (*data).the_primes.size - (*data).kill_us.size); + /* define maximum value for which setup is valid */ - limit = guess_mu_inverse(maxval, (*data).magic); + limit = guess_mu_inverse (maxval, (*data).magic); limit = limit * 2; - (*data).denom = find_denom(the_primes.list, the_primes.size, &limit); + (*data).denom = find_denom (the_primes.list, the_primes.size, &limit); - limit.b_clear(); - num.b_clear(); - denom.b_clear(); - free_bn_array(&the_primes); + limit.b_clear (); + num.b_clear (); + denom.b_clear (); + free_bn_array (&the_primes); } -void free_rel_prime(REL_PRIME_TABLE *data) +//Free relative prime +void free_rel_prime (REL_PRIME_TABLE *data) { - (data->valid)->b_clear(); - (data->prim)->b_clear(); - delete [] data->magic; - free_bn_array(&(data->the_primes)); - free_bn_array(&(data->denom)); + (data->valid)->b_clear (); + (data->prim)->b_clear (); + delete[] data->magic; + free_bn_array (&(data->the_primes)); + free_bn_array (&(data->denom)); } /* find nth number relatively prime, given data */ -extern int rel_prime(BigNum * result, BigNum * number, REL_PRIME_TABLE data) +extern int rel_prime (BigNum *result, BigNum *number, REL_PRIME_TABLE data) { BigNum guess; int i; REL_PRIME_TABLE newdata; - *result = Set_ui(0ul); + *result = Set_ui (0ul); - if (b_cmp(*(data.valid), *number) >= 0) { - guess = (*(data.magic)).br_get_num(); - guess = guess_mu_inverse(number, data.magic); + if (b_cmp (*(data.valid), *number) >= 0) + { + guess = (*(data.magic)).br_get_num (); + guess = guess_mu_inverse (number, data.magic); - *result = find_M(&guess, number, - data.kill_us, data.denom, - data.the_primes, data.magic); + *result = find_M (&guess, number, data.kill_us, data.denom, + data.the_primes, data.magic); } - else { - init_rel_prime(&newdata, number); - rel_prime(result, number, newdata); - free_rel_prime(&newdata); + else + { + init_rel_prime (&newdata, number); + rel_prime (result, number, newdata); + free_rel_prime (&newdata); } /* Do NOT clear guess, since result uses its component array */ @@ -401,29 +426,27 @@ } /* find nth primitive element, given data */ -extern void prim_elt(BigNum * result, BigNum * number, REL_PRIME_TABLE data) +extern void prim_elt (BigNum *result, BigNum *number, REL_PRIME_TABLE data) { - BigNum x, pow,temp; - x = Set_ui(2ul); - x = b_pow(x, data.power); + BigNum x, pow, temp; + x = Set_ui (2ul); + x = b_pow (x, data.power); x = x - 1; temp = *number; - temp = temp + 5UL; /* first few streams are bad; so offset by 5 streams */ - rel_prime(&pow, &temp, data); - *result = b_powm(*(data.prim), pow, x); + temp = temp + 5UL; /* first few streams are bad; so offset by 5 streams */ + rel_prime (&pow, &temp, data); + *result = b_powm (*(data.prim), pow, x); - pow.b_clear(); - temp.b_clear(); + pow.b_clear (); + temp.b_clear (); } - - -/*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ +/*********************************************************************************** + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/SRC/pmlcg/bignum.h sprng5/SRC/pmlcg/bignum.h --- sprng5.orig/SRC/pmlcg/bignum.h 2014-08-25 17:58:33.000000000 +0000 +++ sprng5/SRC/pmlcg/bignum.h 2021-05-18 00:01:37.000000000 +0000 @@ -1,95 +1,93 @@ -#ifndef BIGNUM_H -#define BIGNUM_H - - -#ifdef __GNUC__ -#if __GNUC__ < 4 - #include -#else - #include -#endif -#else - #include +#ifndef BIGNUM_H +#define BIGNUM_H + +#ifdef __GNUC__ +#if __GNUC__ < 4 + #include +#else + #include #endif - -class BigNum -{ - friend BigNum Set_ui (unsigned long int); - friend BigNum Set_si (signed long int); - - friend BigNum operator + (const BigNum &, const BigNum &); - friend BigNum operator + (const BigNum &, const unsigned long int); - friend BigNum operator - (const BigNum &, const BigNum &); - friend BigNum Sub4Div (const BigNum &, const BigNum &); - friend BigNum operator - (const BigNum &, const unsigned long int); - friend BigNum operator * (const BigNum &, const BigNum &); - friend BigNum operator * (const BigNum &, const unsigned long int); - friend BigNum operator / (const BigNum &, const BigNum &); - friend BigNum operator / (const BigNum &, const unsigned long int); - friend BigNum operator % (const BigNum &, const BigNum &); - friend BigNum operator % (const BigNum &, const unsigned long int); - friend BigNum operator ^ (const BigNum &, const BigNum &); - friend BigNum operator ^ (const BigNum &, const unsigned long int); - friend unsigned long int operator & (const BigNum &, const unsigned long int); - friend BigNum operator >> (BigNum &, unsigned long int); - friend BigNum operator << (BigNum &, unsigned long int); - friend BigNum b_div_2exp (const BigNum &, const unsigned long int); - friend BigNum b_pow (const BigNum &, const unsigned long int); - friend BigNum b_powm (const BigNum &, const BigNum &, const BigNum &); - friend BigNum b_powm (const BigNum &, const unsigned int, const BigNum &); - friend BigNum b_abs(const BigNum &); - friend BigNum b_abs2(const BigNum &); - friend BigNum b_neg(const BigNum &); - friend std::ostream& operator << (std::ostream &, const BigNum &); - - friend bool operator == (const BigNum &, const BigNum &); - friend bool operator == (const BigNum &, const unsigned long int); - friend int b_cmp (const BigNum &, const BigNum &); - friend int b_cmp (const BigNum &, const unsigned long int); - friend int b_cmp (const BigNum &, const signed long int); - - friend unsigned long int SmallerSize (const BigNum &, const BigNum &); - friend unsigned long int BiggerSize (const BigNum &, const BigNum &); - friend int Test (const unsigned long int, int); - friend unsigned long int Set (const unsigned long int, int); - friend unsigned long int Unset (const unsigned long int, int); - friend unsigned long int CeilDiv (unsigned long int, unsigned long int); - friend int GetNumBits (unsigned long int); - - friend int C2I(char c); - -public: - BigNum(); - BigNum(unsigned long int); - BigNum(char *, char s = '+'); - BigNum(const BigNum &); - BigNum& operator= (const BigNum &); - ~BigNum(); - - unsigned long int b_get_ui() const; - unsigned long int Size() const; - unsigned long int * V() const; - char Sign() const; - BigNum EraseLeadingBits(unsigned long int); - unsigned long int GetTotalBits() const; - void b_clear(); - void b_print_w_sign(); - - //private: - unsigned long int * v; - unsigned long int size; - char sign; -}; - -#endif - - -/*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ +#else +#include +#endif + +class BigNum +{ + friend BigNum Set_ui (unsigned long int); + friend BigNum Set_si (signed long int); + + friend BigNum operator + (const BigNum&, const BigNum&); + friend BigNum operator + (const BigNum&, const unsigned long int); + friend BigNum operator - (const BigNum&, const BigNum&); + friend BigNum Sub4Div (const BigNum&, const BigNum&); + friend BigNum operator - (const BigNum&, const unsigned long int); + friend BigNum operator * (const BigNum&, const BigNum&); + friend BigNum operator * (const BigNum&, const unsigned long int); + friend BigNum operator / (const BigNum&, const BigNum&); + friend BigNum operator / (const BigNum&, const unsigned long int); + friend BigNum operator % (const BigNum&, const BigNum&); + friend BigNum operator % (const BigNum&, const unsigned long int); + friend BigNum operator ^ (const BigNum&, const BigNum&); + friend BigNum operator ^ (const BigNum&, const unsigned long int); + friend unsigned long int operator & (const BigNum&, const unsigned long int); + friend BigNum operator >> (BigNum&, unsigned long int); + friend BigNum operator << (BigNum&, unsigned long int); + friend BigNum b_div_2exp (const BigNum&, const unsigned long int); + friend BigNum b_pow (const BigNum&, const unsigned long int); + friend BigNum b_powm (const BigNum&, const BigNum&, const BigNum&); + friend BigNum b_powm (const BigNum&, const unsigned int, const BigNum&); + friend BigNum b_abs (const BigNum&); + friend BigNum b_abs2 (const BigNum&); + friend BigNum b_neg (const BigNum&); + friend std::ostream& operator << (std::ostream&, const BigNum&); + + friend bool operator == (const BigNum&, const BigNum&); + friend bool operator == (const BigNum&, const unsigned long int); + friend int b_cmp (const BigNum&, const BigNum&); + friend int b_cmp (const BigNum&, const unsigned long int); + friend int b_cmp (const BigNum&, const signed long int); + + friend unsigned long int SmallerSize (const BigNum&, const BigNum&); + friend unsigned long int BiggerSize (const BigNum&, const BigNum&); + friend int Test (const unsigned long int, int); + friend unsigned long int Set (const unsigned long int, int); + friend unsigned long int Unset (const unsigned long int, int); + friend unsigned long int CeilDiv (unsigned long int, unsigned long int); + friend int GetNumBits (unsigned long int); + + friend int C2I (char c); + +public: + BigNum (); + BigNum (unsigned long int); + BigNum (char*, char s = '+'); + BigNum (const BigNum&); + BigNum& operator= (const BigNum&); + ~BigNum (); + + unsigned long int b_get_ui () const; + unsigned long int Size () const; + unsigned long int* V () const; + char Sign () const; + BigNum EraseLeadingBits (unsigned long int); + unsigned long int GetTotalBits () const; + void b_clear (); + void b_print_w_sign (); + + //private: + unsigned long int *v; + unsigned long int size; + char sign; +}; + +#endif + +/*********************************************************************************** + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/SRC/pmlcg/info.h sprng5/SRC/pmlcg/info.h --- sprng5.orig/SRC/pmlcg/info.h 2014-08-25 17:58:33.000000000 +0000 +++ sprng5/SRC/pmlcg/info.h 2021-01-15 16:37:38.000000000 +0000 @@ -1,6 +1,6 @@ #define MAXVAL "152D02C7E14AF6800000" /*maximum # of independent streams*/ -struct BIGNUM_ARRAY_TYPE +struct BIGNUM_ARRAY_TYPE { long size; BigNum *list; @@ -16,37 +16,35 @@ #define POWER_N 61 /* Values pertain to this particular parameter: 2^61-1 as modulus*/ -struct BIGNUM_ARRAY_TYPE init_factors() +struct BIGNUM_ARRAY_TYPE init_factors () { struct BIGNUM_ARRAY_TYPE factors; factors.size = 12; factors.list = new BigNum[12]; - - factors.list[0] = Set_ui(2ul); - factors.list[1] = Set_ui(3ul); - factors.list[2] = Set_ui(5ul); - factors.list[3] = Set_ui(7ul); - factors.list[4] = Set_ui(11ul); - factors.list[5] = Set_ui(13ul); - factors.list[6] = Set_ui(31ul); - factors.list[7] = Set_ui(41ul); - factors.list[8] = Set_ui(61ul); - factors.list[9] = Set_ui(151ul); - factors.list[10] = Set_ui(331ul); - factors.list[11] = Set_ui(1321ul); + factors.list[0] = Set_ui (2ul); + factors.list[1] = Set_ui (3ul); + factors.list[2] = Set_ui (5ul); + factors.list[3] = Set_ui (7ul); + factors.list[4] = Set_ui (11ul); + factors.list[5] = Set_ui (13ul); + factors.list[6] = Set_ui (31ul); + factors.list[7] = Set_ui (41ul); + factors.list[8] = Set_ui (61ul); + factors.list[9] = Set_ui (151ul); + factors.list[10] = Set_ui (331ul); + factors.list[11] = Set_ui (1321ul); + return (factors); } - - -/*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ +/*********************************************************************************** + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/SRC/pmlcg/longlong.h sprng5/SRC/pmlcg/longlong.h --- sprng5.orig/SRC/pmlcg/longlong.h 2014-08-25 17:58:33.000000000 +0000 +++ sprng5/SRC/pmlcg/longlong.h 2021-01-15 16:37:37.000000000 +0000 @@ -1,38 +1,38 @@ // casts have been removed /* longlong.h -- definitions for mixed size 32/64 bit arithmetic. - Copyright (C) 1991, 1992, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2004 - Free Software Foundation, Inc. + Copyright (C) 1991, 1992, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2004 + Free Software Foundation, Inc. - This definition file is free software; you can redistribute it - and/or modify it under the terms of the GNU General Public - License as published by the Free Software Foundation; either - version 2, or (at your option) any later version. + This definition file is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2, or (at your option) any later version. - This definition file is distributed in the hope that it will be - useful, but WITHOUT ANY WARRANTY; without even the implied - warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU General Public License for more details. + This definition file is distributed in the hope that it will be + useful, but WITHOUT ANY WARRANTY; without even the implied + warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ /* You have to define the following before including this file: - UWtype -- An unsigned type, default type for operations (typically a "word") - UHWtype -- An unsigned type, at least half the size of UWtype. - UDWtype -- An unsigned type, at least twice as large a UWtype - W_TYPE_SIZE -- size in bits of UWtype + UWtype -- An unsigned type, default type for operations (typically a "word") + UHWtype -- An unsigned type, at least half the size of UWtype. + UDWtype -- An unsigned type, at least twice as large a UWtype + W_TYPE_SIZE -- size in bits of UWtype - UQItype -- Unsigned 8 bit type. - SItype, USItype -- Signed and unsigned 32 bit types. - DItype, UDItype -- Signed and unsigned 64 bit types. + UQItype -- Unsigned 8 bit type. + SItype, USItype -- Signed and unsigned 32 bit types. + DItype, UDItype -- Signed and unsigned 64 bit types. - On a 32 bit machine UWtype should typically be USItype; - on a 64 bit machine, UWtype should typically be UDItype. -*/ + On a 32 bit machine UWtype should typically be USItype; + on a 64 bit machine, UWtype should typically be UDItype. + */ #define __BITS4 (W_TYPE_SIZE / 4) #define __ll_B ((UWtype) 1 << (W_TYPE_SIZE / 2)) @@ -52,54 +52,54 @@ /* Define auxiliary asm macros. - 1) umul_ppmm(high_prod, low_prod, multipler, multiplicand) multiplies two - UWtype integers MULTIPLER and MULTIPLICAND, and generates a two UWtype - word product in HIGH_PROD and LOW_PROD. + 1) umul_ppmm(high_prod, low_prod, multipler, multiplicand) multiplies two + UWtype integers MULTIPLER and MULTIPLICAND, and generates a two UWtype + word product in HIGH_PROD and LOW_PROD. - 2) __umulsidi3(a,b) multiplies two UWtype integers A and B, and returns a - UDWtype product. This is just a variant of umul_ppmm. + 2) __umulsidi3(a,b) multiplies two UWtype integers A and B, and returns a + UDWtype product. This is just a variant of umul_ppmm. - 3) udiv_qrnnd(quotient, remainder, high_numerator, low_numerator, - denominator) divides a UDWtype, composed by the UWtype integers - HIGH_NUMERATOR and LOW_NUMERATOR, by DENOMINATOR and places the quotient - in QUOTIENT and the remainder in REMAINDER. HIGH_NUMERATOR must be less - than DENOMINATOR for correct operation. If, in addition, the most - significant bit of DENOMINATOR must be 1, then the pre-processor symbol - UDIV_NEEDS_NORMALIZATION is defined to 1. + 3) udiv_qrnnd(quotient, remainder, high_numerator, low_numerator, + denominator) divides a UDWtype, composed by the UWtype integers + HIGH_NUMERATOR and LOW_NUMERATOR, by DENOMINATOR and places the quotient + in QUOTIENT and the remainder in REMAINDER. HIGH_NUMERATOR must be less + than DENOMINATOR for correct operation. If, in addition, the most + significant bit of DENOMINATOR must be 1, then the pre-processor symbol + UDIV_NEEDS_NORMALIZATION is defined to 1. - 4) sdiv_qrnnd(quotient, remainder, high_numerator, low_numerator, - denominator). Like udiv_qrnnd but the numbers are signed. The quotient - is rounded towards 0. + 4) sdiv_qrnnd(quotient, remainder, high_numerator, low_numerator, + denominator). Like udiv_qrnnd but the numbers are signed. The quotient + is rounded towards 0. - 5) count_leading_zeros(count, x) counts the number of zero-bits from the - msb to the first nonzero bit in the UWtype X. This is the number of - steps X needs to be shifted left to set the msb. Undefined for X == 0, - unless the symbol COUNT_LEADING_ZEROS_0 is defined to some value. + 5) count_leading_zeros(count, x) counts the number of zero-bits from the + msb to the first nonzero bit in the UWtype X. This is the number of + steps X needs to be shifted left to set the msb. Undefined for X == 0, + unless the symbol COUNT_LEADING_ZEROS_0 is defined to some value. - 6) count_trailing_zeros(count, x) like count_leading_zeros, but counts - from the least significant end. + 6) count_trailing_zeros(count, x) like count_leading_zeros, but counts + from the least significant end. - 7) add_ssaaaa(high_sum, low_sum, high_addend_1, low_addend_1, - high_addend_2, low_addend_2) adds two UWtype integers, composed by - HIGH_ADDEND_1 and LOW_ADDEND_1, and HIGH_ADDEND_2 and LOW_ADDEND_2 - respectively. The result is placed in HIGH_SUM and LOW_SUM. Overflow - (i.e. carry out) is not stored anywhere, and is lost. + 7) add_ssaaaa(high_sum, low_sum, high_addend_1, low_addend_1, + high_addend_2, low_addend_2) adds two UWtype integers, composed by + HIGH_ADDEND_1 and LOW_ADDEND_1, and HIGH_ADDEND_2 and LOW_ADDEND_2 + respectively. The result is placed in HIGH_SUM and LOW_SUM. Overflow + (i.e. carry out) is not stored anywhere, and is lost. - 8) sub_ddmmss(high_difference, low_difference, high_minuend, low_minuend, - high_subtrahend, low_subtrahend) subtracts two two-word UWtype integers, - composed by HIGH_MINUEND_1 and LOW_MINUEND_1, and HIGH_SUBTRAHEND_2 and - LOW_SUBTRAHEND_2 respectively. The result is placed in HIGH_DIFFERENCE - and LOW_DIFFERENCE. Overflow (i.e. carry out) is not stored anywhere, - and is lost. + 8) sub_ddmmss(high_difference, low_difference, high_minuend, low_minuend, + high_subtrahend, low_subtrahend) subtracts two two-word UWtype integers, + composed by HIGH_MINUEND_1 and LOW_MINUEND_1, and HIGH_SUBTRAHEND_2 and + LOW_SUBTRAHEND_2 respectively. The result is placed in HIGH_DIFFERENCE + and LOW_DIFFERENCE. Overflow (i.e. carry out) is not stored anywhere, + and is lost. - If any of these macros are left undefined for a particular CPU, - C macros are used. */ + If any of these macros are left undefined for a particular CPU, + C macros are used. */ /* The CPUs come in alphabetical order below. - Please add support for more CPUs here, or improve the current support - for the CPUs below! - (E.g. WE32100, IBM360.) */ + Please add support for more CPUs here, or improve the current support + for the CPUs below! + (E.g. WE32100, IBM360.) */ #if defined (__GNUC__) && !defined (NO_ASM) @@ -1217,7 +1217,7 @@ #endif /* If we lack umul_ppmm but have smul_ppmm, define umul_ppmm in terms of - smul_ppmm. */ + smul_ppmm. */ #if !defined (umul_ppmm) && defined (smul_ppmm) #define umul_ppmm(w1, w0, u, v) \ do { \ @@ -1302,7 +1302,7 @@ } while (0) /* If the processor has no udiv_qrnnd but sdiv_qrnnd, go through - __udiv_w_sdiv (defined in libgcc or elsewhere). */ + __udiv_w_sdiv (defined in libgcc or elsewhere). */ #if !defined (udiv_qrnnd) && defined (sdiv_qrnnd) #define udiv_qrnnd(q, r, nh, nl, d) \ do { \ @@ -1346,7 +1346,7 @@ #if !defined (count_trailing_zeros) /* Define count_trailing_zeros using count_leading_zeros. The latter might be - defined in asm, but if it is not, the C version above is good enough. */ + defined in asm, but if it is not, the C version above is good enough. */ #define count_trailing_zeros(count, x) \ do { \ UWtype __ctz_x = (x); \ @@ -1359,14 +1359,13 @@ #ifndef UDIV_NEEDS_NORMALIZATION #define UDIV_NEEDS_NORMALIZATION 0 #endif - - -/*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ + +/*********************************************************************************** + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/SRC/pmlcg/pmlcg.cpp sprng5/SRC/pmlcg/pmlcg.cpp --- sprng5.orig/SRC/pmlcg/pmlcg.cpp 2018-10-22 19:39:18.000000000 +0000 +++ sprng5/SRC/pmlcg/pmlcg.cpp 2021-04-08 18:13:59.000000000 +0000 @@ -1,19 +1,19 @@ /*************************************************************************/ /*************************************************************************/ /* Parallel Prime Modulus Linear Congruential Generator */ -/* */ +/* */ /* Modifed by: J. Ren */ /* Florida State University */ /* Email: ren@csit.fsu.edu */ /* */ /* Based on the implementation by: */ /* Ashok Srinivasan (Apr 13, 1998) */ -/* */ +/* */ /* Based on: ??? */ /* */ /*************************************************************************/ /*************************************************************************/ - + #ifdef __GNUC__ #if __GNUC__ < 4 #include @@ -21,7 +21,7 @@ #include #endif /* if GNUC < 4 */ #else - #include +#include #endif /* if GNUC defined */ #include @@ -39,11 +39,9 @@ #include "basic.h" #include - #define MAX_STREAMS pmlcg_MAX_STREAMS #define NGENS pmlcg_NGENS - #ifdef CONVEX #undef _LONG_LONG /* problems on convex compiler with 64 bit arithmetic */ #endif @@ -77,122 +75,120 @@ /*** Name for Generator ***/ #define GENTYPE VERSION "Prime modulus LCG" - #define NPARAMS 1 /*** number of valid parameters ***/ -int MAX_STREAMS = (1<<30); /* Maximum number of streams for initialization */ - /* ... more streams can be spawned, though */ - +int MAX_STREAMS = (1 << 30); /* Maximum number of streams for initialization */ +/* ... more streams can be spawned, though */ -int NGENS=0; /* number of random streams in current process */ +int NGENS = 0; /* number of random streams in current process */ #ifdef LONG64 #define limbsize 8 #else #define limbsize 4 #endif - + /* ************************************************************* */ /* ************************* init ************************** */ /* ************************************************************* */ -static int init(unsigned long * aa, unsigned long * x0, BigNum *k, int seed, int param) +static int init (unsigned long *aa, unsigned long *x0, BigNum *k, int seed, + int param) { /* - called by: initialize_int() - calls : - init_rel_prime(), prim_elt() [ rand_lcg_mu.h ] + called by: initialize_int() + calls : + init_rel_prime(), prim_elt() [ rand_lcg_mu.h ] - params : unsigned long aa, x0 = 'a' and 'r' arrays of a generator - ( empty when called ) - MP_INT k = k value to use to calculate polynomial - param determines the power + params : unsigned long aa, x0 = 'a' and 'r' arrays of a generator + ( empty when called ) + MP_INT k = k value to use to calculate polynomial + param determines the power - returns : 'a_size' : the length of the multiplier array - ( also, params 'aa[]' and 'x0[]' will be filled ) + returns : 'a_size' : the length of the multiplier array + ( also, params 'aa[]' and 'x0[]' will be filled ) - Sets up the multiplier ('a' array) and initial seed ('r' array) - for the given value of k. [ 'a' == 'aa' , 'r' == 'x0' ] - */ + Sets up the multiplier ('a' array) and initial seed ('r' array) + for the given value of k. [ 'a' == 'aa' , 'r' == 'x0' ] + */ BigNum A; REL_PRIME_TABLE data; long i, a_size; /* find multiplier value */ - A = (char *)MAXVAL; - init_rel_prime(&data, &A); /* param = 2^61-1 is assumes here */ - prim_elt(&A, k, data); - for (i=0; isi = 0ul; q[i]->k = 0ul; } - /* set up 1st generator */ + /* set up 1st generator */ q[0]->k = *old_si; #ifdef LONG64 @@ -201,7 +197,7 @@ q[0]->x = (unsigned LONG64)r[1]<<32|r[0]; #else - q[0]->a_size = init(q[0]->a, q[0]->r, &(q[0]->k),seed,param); + q[0]->a_size = init (q[0]->a, q[0]->r, &(q[0]->k), seed, param); #endif q[0]->si = (*old_si) * 2; @@ -211,49 +207,49 @@ i = 1; order[0] = 0; - if (ngen>1) while (1) - { - l = i; - - for (k=0; k 1) + while (1) { - q[i]->k = q[order[k]]->si; + l = i; -#ifdef LONG64 - a_size = init(a,r,&(q[i]->k),seed,param); - q[i]->mult = (unsigned LONG64)a[1]<<32|a[0]; - q[i]->x = (unsigned LONG64)r[1]<<32|r[0]; -#else - q[i]->a_size = init(q[i]->a,q[i]->r,&(q[i]->k),seed,param); -#endif + for (k = 0; k < l; k++) + { + q[i]->k = q[order[k]]->si; - q[order[k]]->si = q[order[k]]->si * 2; - q[i]->si = q[order[k]]->si; - q[i]->si = q[i]->si + 1; + #ifdef LONG64 + a_size = init(a,r,&(q[i]->k),seed,param); + q[i]->mult = (unsigned LONG64)a[1]<<32|a[0]; + q[i]->x = (unsigned LONG64)r[1]<<32|r[0]; + #else + q[i]->a_size = init (q[i]->a, q[i]->r, &(q[i]->k), seed, param); + #endif - if (ngen == ++i) - break; - } + q[order[k]]->si = q[order[k]]->si * 2; + q[i]->si = q[order[k]]->si; + q[i]->si = q[i]->si + 1; - if (ngen == i) - break; + if (ngen == ++i) + break; + } - for (k=l-1; k>0; k--) - { - order[2*k+1] = l + k; - order[2*k] = order[k]; + if (ngen == i) + break; + + for (k = l - 1; k > 0; k--) + { + order[2 * k + 1] = l + k; + order[2 * k] = order[k]; + } + order[1] = l; } - order[1] = l; - } - - delete [] order; - + + delete[] order; + return q; } /* end of initialize */ - -PMLCG::PMLCG() +PMLCG::PMLCG () { rng_type = 5; gentype = NULL; @@ -277,11 +273,11 @@ /* Initialize random number stream */ -int PMLCG::init_rng(int gn, int tg, int s, int pa) +int PMLCG::init_rng (int gn, int tg, int s, int pa) { -/* gives back one stream (node gennum) with updated spawning */ -/* info; should be called total_gen times, with different value */ -/* of gennum in [0,total_gen) each call */ + /* gives back one stream (node gennum) with updated spawning */ + /* info; should be called total_gen times, with different value */ + /* of gennum in [0,total_gen) each call */ PMLCG **p = NULL; int i; BigNum local_k; @@ -289,34 +285,38 @@ if (tg <= 0) /* Is total_gen valid ? */ { tg = 1; - fprintf(stderr,"WARNING - init_rng: Total_gen <= 0. Default value of 1 used for total_gen\n"); + fprintf (stderr, + "WARNING - init_rng: Total_gen <= 0. Default value of 1 used for total_gen\n"); } if (gn >= MAX_STREAMS) /* check if gen_num is valid */ - fprintf(stderr,"WARNING - init_rng: gennum: %d > maximum number of independent streams: %d\n\tIndependence of streams cannot be guranteed.\n", - gn, MAX_STREAMS); + fprintf (stderr, + "WARNING - init_rng: gennum: %d > maximum number of independent streams: %d\n\tIndependence of streams cannot be guranteed.\n", + gn, MAX_STREAMS); if (gn < 0 || gn >= tg) /* check if gen_num is valid */ { - fprintf(stderr,"ERROR - init_rng: gennum %d out of range [%d,%d).\n", - gn, 0, tg); + fprintf (stderr, "ERROR - init_rng: gennum %d out of range [%d,%d).\n", + gn, 0, tg); return 0; } - if (pa < 0 || pa >= NPARAMS) /* check if parameter is valid */ + if (pa < 0 || pa >= NPARAMS) /* check if parameter is valid */ { - fprintf(stderr,"WARNING - init_rng: parameter not valid. Using Default parameter.\n"); + fprintf (stderr, + "WARNING - init_rng: parameter not valid. Using Default parameter.\n"); pa = 0; } - - s &= 0x7fffffff; /* Only 31 LSB of seed considered */ - local_k = Set_ui(gn); /* final seed != 0 */ + + s &= 0x7fffffff; /* Only 31 LSB of seed considered */ + local_k = Set_ui (gn); /* final seed != 0 */ // local_k = gn; - p = initialize(1, &local_k, s, pa); + p = initialize (1, &local_k, s, pa); - if(p==NULL) + if (p == NULL) return 0; - else { + else + { rng_type = p[0]->rng_type; gentype = p[0]->gentype; stream_number = p[0]->stream_number; @@ -325,47 +325,47 @@ parameter = p[0]->parameter; narrays = p[0]->narrays; -#ifdef LONG64 + #ifdef LONG64 mult = p[0]->mult; x = p[0]->x; -#else + #else r[0] = p[0]->r[0]; r[1] = p[0]->r[1]; a[0] = p[0]->a[0]; a[1] = p[0]->a[1]; a_size = p[0]->a_size; -#endif + #endif si = p[0]->si; } - delete [] p; - + delete[] p; + /* Initiallize data structure variables */ rng_type = SPRNG_PMLCG; - gentype = (char *)GENTYPE; + gentype = (char*) GENTYPE; stream_number = gn; nstreams = tg; init_seed = s; parameter = pa; - - narrays = 0; /* number of arrays needed by your generator */ - while (b_cmp(si, static_cast(tg)) < 0) + narrays = 0; /* number of arrays needed by your generator */ + + while (b_cmp (si, static_cast (tg)) < 0) si = si * 2; - local_k.b_clear(); - - NGENS++; /* NGENS = # of streams */ - + local_k.b_clear (); + + NGENS++; /* NGENS = # of streams */ + return 1; -} +} -PMLCG::~PMLCG() +PMLCG::~PMLCG () { - free_rng(); + free_rng (); } -PMLCG::PMLCG(const PMLCG & c) +PMLCG::PMLCG (const PMLCG &c) { rng_type = c.rng_type; gentype = c.gentype; @@ -389,10 +389,11 @@ si = c.si; } -PMLCG & PMLCG::operator= (const PMLCG & c) +PMLCG& PMLCG::operator= (const PMLCG &c) { - if (this != &c) { - this->free_rng(); + if (this != &c) + { + this->free_rng (); rng_type = c.rng_type; gentype = c.gentype; @@ -420,8 +421,8 @@ /* ************************************************************* */ /* ************************* iterate ************************* */ /* ************************************************************* */ - -void PMLCG::iterate() + +void PMLCG::iterate () { #ifdef LONG64 @@ -451,63 +452,62 @@ x = (x0+x3); if(x&MULT_MASK4) /*Note: x != ..MASK3 since x!=0 mod prime for pmlcg */ - { - x &= MULT_MASK3; - x += 1; - - if(x == MULT_MASK4) - x = 1; - } +{ + x &= MULT_MASK3; + x += 1; + + if(x == MULT_MASK4) + x = 1; +} #else /* end LONG64, start 32 bit arithmetic */ -/* + /* -called by: get_rn_dbl() -calls : add_ssaaaa(), umul_ppmm() [ longlong.h ] + called by: get_rn_dbl() + calls : add_ssaaaa(), umul_ppmm() [ longlong.h ] -params : int *genptr = generator to iterate -returns : void + params : int *genptr = generator to iterate + returns : void -Performs the modular multiplication needed to iterate generator -Xn+1 = (Xn * a) mod (2^N - 1) + Performs the modular multiplication needed to iterate generator + Xn+1 = (Xn * a) mod (2^N - 1) -*/ + */ - /* - aa[] - * Xn[] - -------- - result[] -> result[] is split into 2 parts : kk[]rr[] + /* + aa[] + * Xn[] + -------- + result[] -> result[] is split into 2 parts : kk[]rr[] - the new Xn[] = ( kk[] + rr[] ) mod ( 2^n - 1) - */ + the new Xn[] = ( kk[] + rr[] ) mod ( 2^n - 1) + */ unsigned long *aa, *Xn, *rr, *kk; static unsigned long result[4]; /* should be atleast 2*OP_SIZE */ static char overflow; /* should be atleast 2*OP_SIZE */ - unsigned long a0, b0, of, temp, temp2; /* temporary storage variables */ + unsigned long a0, b0, of, temp, temp2; /* temporary storage variables */ unsigned long prod_lo, prod_hi, res_lo, res_hi; - long i,j; /* counter variables */ + long i, j; /* counter variables */ int param = 0; - + aa = a; Xn = r; - memset(result,0,4*sizeof(unsigned long)); /* initialize to 0 */ + memset (result, 0, 4 * sizeof(unsigned long)); /* initialize to 0 */ overflow = 0; - /* result[] = aa[] * Xn[] */ a0 = aa[0]; b0 = Xn[0]; - umul_ppmm(prod_hi,prod_lo, a0,b0); + umul_ppmm(prod_hi, prod_lo, a0, b0); result[0] = prod_lo; result[1] = prod_hi; - + b0 = Xn[1]; - umul_ppmm(prod_hi,prod_lo, a0,b0); + umul_ppmm(prod_hi, prod_lo, a0, b0); res_lo = result[1]; - add_ssaaaa(of,temp2, 0,prod_lo, 0,res_lo); + add_ssaaaa(of, temp2, 0, prod_lo, 0, res_lo); result[1] = temp2; - add_ssaaaa(res_hi,res_lo,0,prod_hi, 0,of); + add_ssaaaa(res_hi, res_lo, 0, prod_hi, 0, of); result[2] = res_lo; overflow = res_hi; @@ -517,54 +517,54 @@ b0 = Xn[0]; res_lo = result[1]; res_hi = result[2]; - umul_ppmm(prod_hi,prod_lo, a0,b0); - add_ssaaaa(of,temp2, 0,prod_lo, 0,res_lo); + umul_ppmm(prod_hi, prod_lo, a0, b0); + add_ssaaaa(of, temp2, 0, prod_lo, 0, res_lo); result[1] = temp2; - add_ssaaaa(temp,temp2, 0, prod_hi, 0,res_hi); - add_ssaaaa(res_hi,res_lo, temp,temp2, 0,of); + add_ssaaaa(temp, temp2, 0, prod_hi, 0, res_hi); + add_ssaaaa(res_hi, res_lo, temp, temp2, 0, of); result[2] = res_lo; overflow += res_hi; b0 = Xn[1]; res_lo = result[2]; res_hi = result[3]; - umul_ppmm(prod_hi,prod_lo, a0,b0); - add_ssaaaa(of,temp2, 0,prod_lo, 0,res_lo); + umul_ppmm(prod_hi, prod_lo, a0, b0); + add_ssaaaa(of, temp2, 0, prod_lo, 0, res_lo); result[2] = temp2; - add_ssaaaa(temp,of, 0,of, 0,overflow); - add_ssaaaa(temp,temp2, 0, prod_hi, 0,res_hi); - add_ssaaaa(res_hi,res_lo, temp,temp2, 0,of); + add_ssaaaa(temp, of, 0, of, 0, overflow); + add_ssaaaa(temp, temp2, 0, prod_hi, 0, res_hi); + add_ssaaaa(res_hi, res_lo, temp, temp2, 0, of); result[3] = res_lo; } - + /* rr = low(result) (R) kk = hi(result) (K) */ rr = result; kk = result + OP_SIZE; /* shift 'kk' left */ temp2 = 0; - for (i=0; i> SHIFT; } /* move extra bits at top of rr[] into start of kk[] */ - temp = rr[OP_SIZE-1]; + temp = rr[OP_SIZE - 1]; temp2 = temp >> SHIFT; - rr[OP_SIZE-1] = ((temp<> RNGBITS; + rr[OP_SIZE - 1] = ((temp << RNGBITS) & 0xffffffff) >> RNGBITS; kk[0] += temp2; /* Xn+1 = rr + kk */ a0 = 0; - for (i=0; i> n ) */ temp2 = Xn[OP_SIZE - 1] >> SHIFT; - Xn[OP_SIZE - 1] &= MASK; + Xn[OP_SIZE - 1] &= MASK; - for (i=0; i>30); #else unsigned long irn; - - iterate(); - irn = (r[1]<<2) | ((r[0]&0xc0000000)>>30); - - return (int) (irn&0x7fffffff); + iterate (); + + irn = (r[1] << 2) | ((r[0] & 0xc0000000) >> 30); + + return (int) (irn & 0x7fffffff); #endif - -} +} /* Return a single precision random number */ -float PMLCG::get_rn_flt() +float PMLCG::get_rn_flt () { - return (float) get_rn_dbl(); + return (float) get_rn_dbl (); } - /*************************************************************************/ /*************************************************************************/ /* SPAWN_RNG: spawns new generators */ /*************************************************************************/ /*************************************************************************/ -int PMLCG::spawn_rng(int nspawned, Sprng ***newgens) +int PMLCG::spawn_rng (int nspawned, Sprng ***newgens) { - PMLCG ** genptr; + PMLCG **genptr; int i; - + if (nspawned <= 0) /* is nspawned valid ? */ { nspawned = 1; - fprintf(stderr,"WARNING - spawn_rng: nspawned <= 0. Default value of 1 used for nspawned\n"); + fprintf ( + stderr, + "WARNING - spawn_rng: nspawned <= 0. Default value of 1 used for nspawned\n"); } - - genptr = initialize(nspawned, &si,init_seed,parameter); - if(genptr == NULL) /* allocate memory for pointers to structures */ + genptr = initialize (nspawned, &si, init_seed, parameter); + + if (genptr == NULL) /* allocate memory for pointers to structures */ { *newgens = NULL; return 0; } else { - *newgens = (Sprng **) genptr; + *newgens = (Sprng**) genptr; - for(i=0; irng_type = rng_type; - genptr[i]->gentype = (char *)GENTYPE; + genptr[i]->gentype = (char*) GENTYPE; genptr[i]->stream_number = stream_number; genptr[i]->nstreams = nstreams; - genptr[i]->init_seed = init_seed; + genptr[i]->init_seed = init_seed; genptr[i]->parameter = parameter; - - genptr[i]->narrays = 0; /* number of arrays needed by your generator */ + genptr[i]->narrays = 0; /* number of arrays needed by your generator */ + NGENS++; } } - + return nspawned; } - /* Free memory allocated for data structure associated with stream */ -int PMLCG::free_rng() +int PMLCG::free_rng () { int i; - - assert(this != NULL); - - k.b_clear(); - si.b_clear(); + assert (this != NULL); + + k.b_clear (); + si.b_clear (); + // free(this); NGENS--; return NGENS; } - -int PMLCG::pack_rng(char **buffer) +int PMLCG::pack_rng (char **buffer) { int i, size; unsigned char *p, *initp; unsigned int m[2], temp; - - /*std::cout << "packing the following:\n"; - std::cout << init_seed << " = seed " << parameter << " = parameter " << stream_number << " = streamnum\n"; - std::cout << mult << " = mult " << x << " = x\n\n"; - std::cout << "k = " << k << "\n"; - std::cout << "si = " << si << "\n\n";*/ - #ifdef LONG64 +#ifdef LONG64 size = 4 + 3*4 + 2*8;// strlen(gentype)+1; #else - size = 4 + 3*4 + 2*8 + 4; - #endif - - size += 2 * sizeof(si.size) + si.size * sizeof(long int) + k.size * sizeof(long int) + 2; + size = 4 + 3 * 4 + 2 * 8 + 4; +#endif + + size += 2 * sizeof(si.size) + si.size * sizeof(long int) + + k.size * sizeof(long int) + 2; /* The new load/store routines make using sizeof unnecessary. Infact, */ /* using sizeof could be erroneous. */ - initp = p = (unsigned char *) mymalloc(size); + initp = p = (unsigned char*) mymalloc(size); - if(p == NULL) + if (p == NULL) { *buffer = NULL; return 0; } - - p += store_int(rng_type,4,p); - p += store_int(init_seed,4,p); - p += store_int(stream_number,4,p); - p += store_int(parameter,4,p); - - #ifdef LONG64 + p += store_int (rng_type, 4, p); + + p += store_int (init_seed, 4, p); + p += store_int (stream_number, 4, p); + p += store_int (parameter, 4, p); + +#ifdef LONG64 p += store_long64(mult,8,p); p += store_long64(x,8,p); #else - p += store_int(a_size,4,p); - m[0] = r[0]>>8; - m[1] = r[0]<<24 | r[1]; - p += store_intarray(m,2,4,p); - - m[0] = a[0]>>8; - m[1] = a[0]<<24 | a[1]; - p += store_intarray(m,2,4,p); + p += store_int (a_size, 4, p); + m[0] = r[0] >> 8; + m[1] = r[0] << 24 | r[1]; + p += store_intarray (m, 2, 4, p); - #endif - + m[0] = a[0] >> 8; + m[1] = a[0] << 24 | a[1]; + p += store_intarray (m, 2, 4, p); + +#endif + /* Storing bignum member vars */ - p += store_long(si.size, sizeof(si.size), p); - p += store_longarray(si.v, si.size, sizeof(long int), p); + p += store_long (si.size, sizeof(si.size), p); + p += store_longarray (si.v, si.size, sizeof(long int), p); p += 1; memcpy (p, &si.sign, 1); - - - p += store_long(k.size, sizeof(k.size), p); - p += store_longarray(k.v, k.size, sizeof(long int), p); + + p += store_long (k.size, sizeof(k.size), p); + p += store_longarray (k.v, k.size, sizeof(long int), p); p += 1; memcpy (p, &k.sign, 1); - - *buffer = (char *) initp; - assert(p-initp == size); - - return p-initp; - - /*char *temp_buffer; - int size, i; - int pos=0; - size = 4 + sizeof(PMLCG) + narrays * sizeof(int) + strlen(gentype) + 1; - size += k.size * limbsize; - size += si.size * limbsize; - - temp_buffer = new char[size]; - if(temp_buffer == NULL) - { - *buffer = NULL; - return 0; - } - - pos += store_int(rng_type,4,(unsigned char*)(temp_buffer+pos)); - strcpy(temp_buffer+pos,gentype); - pos += strlen(gentype)+1; - - - - memcpy(temp_buffer+pos,this,sizeof(PMLCG)); - pos += sizeof(PMLCG); - - memcpy(temp_buffer+pos, k.v, k.size * limbsize); - pos += k.size * limbsize; - memcpy(temp_buffer+pos, si.v, si.size * limbsize); - pos += si.size * limbsize; + *buffer = (char*) initp; + assert (p - initp == size); - assert(pos == size); - - *buffer = temp_buffer; - */ - - + return p - initp; + return size; } - -int PMLCG::unpack_rng(char *packed) +int PMLCG::unpack_rng (char *packed) { unsigned int i, m[2]; unsigned char *p; - - p = (unsigned char *) packed; - /*if(this == NULL) - return 0;*/ - - p += load_int(p,4,(unsigned int *)&rng_type); - - if (rng_type != SPRNG_PMLCG) { - fprintf(stderr,"ERROR: Unpacked ' %d ' instead of ' %d '\n", rng_type, SPRNG_LCG64); + p = (unsigned char*) packed; + + p += load_int (p, 4, (unsigned int*) &rng_type); + + if (rng_type != SPRNG_PMLCG) + { + fprintf (stderr, "ERROR: Unpacked ' %d ' instead of ' %d '\n", rng_type, + SPRNG_LCG64); return 0; } - p += load_int(p,4,(unsigned int *)&init_seed); - p += load_int(p,4,(unsigned int *)&stream_number); - p += load_int(p,4,(unsigned int *)¶meter); + p += load_int (p, 4, (unsigned int*) &init_seed); + p += load_int (p, 4, (unsigned int*) &stream_number); + p += load_int (p, 4, (unsigned int*) ¶meter); - #ifdef LONG64 /* 64 bit integer types */ p += load_long64(p,8,&mult); p += load_long64(p,8,&x); #else /* No 64 bit type available */ - p += load_int(p,4,&a_size); + p += load_int (p, 4, &a_size); - p += load_intarray(p,2,4,&m); - r[1] = m[1]&0xffffff; - r[0] = m[1]>>24 | m[0]<<8; - - p += load_intarray(p,2,4,&m); - a[1] = m[1]&0xffffff; - a[0] = m[1]>>24 | m[0]<<8; + p += load_intarray (p, 2, 4, &m); + r[1] = m[1] & 0xffffff; + r[0] = m[1] >> 24 | m[0] << 8; + + p += load_intarray (p, 2, 4, &m); + a[1] = m[1] & 0xffffff; + a[0] = m[1] >> 24 | m[0] << 8; #endif /* Loading bignum member vars */ - p += load_long(p, sizeof(si.size), &(si.size)); - p += load_longarray(p, si.size, sizeof(long int), si.v); + p += load_long (p, sizeof(si.size), &(si.size)); + p += load_longarray (p, si.size, sizeof(long int), si.v); p += 1; memcpy (&si.sign, p, 1); - p += load_long(p, sizeof(k.size), &(k.size)); - p += load_longarray(p, k.size, sizeof(long int), k.v); + p += load_long (p, sizeof(k.size), &(k.size)); + p += load_longarray (p, k.size, sizeof(long int), k.v); p += 1; memcpy (&k.sign, p, 1); + narrays = 0; - narrays = 0; - NGENS++; - /*std::cout << "unpacked the following:\n"; - std::cout << std::dec << init_seed << " = seed " << parameter << " = parameter " << stream_number << " = streamnum\n"; - std::cout << mult << " = mult " << x << " = x\n\n"; - std::cout << "k = " << k << "\n"; - std::cout << "si = " << si << "\n\n";*/ return 1; - - -/* - int i; - int pos=0; - - if (this == NULL) - return 0; - - // pos += 4; // skip rng_type - if(strcmp(packed+pos,GENTYPE) != 0) - { - fprintf(stderr,"ERROR: Unpacked ' %.24s ' instead of ' %s '\n", - packed+pos, GENTYPE); - return 0; - } - else - gentype = (char *)GENTYPE; - - pos += strlen(gentype)+1;*/ - /* - pos += load_int(p,4,(unsigned int *) &rng_type) - if (rng_type != SPRNG_PMLCG) { - fprintf(stderr,"ERROR: Unpacked ' %d ' instead of ' %d '\n", id, SPRNG_LCG); - return 0; - } - - memcpy(this,packed+pos,sizeof(PMLCG)); - pos += sizeof(PMLCG); - - // q->k._mp_d = (mp_limb_t *) mymalloc(q->k._mp_alloc*sizeof(mp_limb_t)); - // q->si._mp_d = (mp_limb_t *) mymalloc(q->si._mp_alloc*sizeof(mp_limb_t)); - - k.v = new unsigned long int[k.size]; - si.v = new unsigned long int[si.size]; - - // if(q->k._mp_d == NULL || q->si._mp_d == NULL) - if (k.v == NULL || si.v == NULL) - return 0; - - - memcpy(q->k._mp_d,packed+pos,q->k._mp_alloc*sizeof(mp_limb_t)); - pos += q->k._mp_alloc*sizeof(mp_limb_t); - memcpy(q->si._mp_d,packed+pos,q->si._mp_alloc*sizeof(mp_limb_t)); - pos += q->si._mp_alloc*sizeof(mp_limb_t); - */ -/* - memcpy(k.v, packed+pos, k.Size() * limbsize); - pos += k.Size() * limbsize; - memcpy(si.v, packed+pos, si.Size() * limbsize); - pos += si.Size() * limbsize; - - NGENS++; - - return 1; - */ } - -int PMLCG::get_seed_rng() +int PMLCG::get_seed_rng () { return init_seed; } - -int PMLCG::print_rng() +int PMLCG::print_rng () { - printf("\n%s\n", GENTYPE+2); - printf("\n \tseed = %d, stream_number = %d\tparameter = %d\n\n", init_seed, stream_number, parameter); + printf ("\n%s\n", GENTYPE + 2); + printf ("\n \tseed = %d, stream_number = %d\tparameter = %d\n\n", init_seed, + stream_number, parameter); /*#ifdef LONG64 - printf("multiplier = %llu, seed = %llu\n", mult, x); - #endif*/ + printf("multiplier = %llu, seed = %llu\n", mult, x); + #endif*/ return 1; } - - - /*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/SRC/pmlcg/pmlcg.h sprng5/SRC/pmlcg/pmlcg.h --- sprng5.orig/SRC/pmlcg/pmlcg.h 2014-08-25 17:58:33.000000000 +0000 +++ sprng5/SRC/pmlcg/pmlcg.h 2021-01-15 16:35:52.000000000 +0000 @@ -3,56 +3,56 @@ #include "bignum.h" -extern "C" { -class PMLCG : public Sprng +extern "C" { - public: + class PMLCG : public Sprng + { + public: - PMLCG(); - int init_rng(int, int, int, int); - ~PMLCG(); - PMLCG(const PMLCG &); - PMLCG & operator= (const PMLCG &); + PMLCG (); + int init_rng (int, int, int, int); + ~PMLCG (); + PMLCG (const PMLCG&); + PMLCG& operator= (const PMLCG&); - int get_rn_int(); - float get_rn_flt(); - double get_rn_dbl(); - int spawn_rng(int, Sprng ***); - int get_seed_rng(); - int free_rng(); - int pack_rng(char **); - int unpack_rng (char *); - int print_rng (); + int get_rn_int (); + float get_rn_flt (); + double get_rn_dbl (); + int spawn_rng (int, Sprng***); + int get_seed_rng (); + int free_rng (); + int pack_rng (char**); + int unpack_rng (char*); + int print_rng (); - void iterate(); + void iterate (); - int rng_type; - char *gentype; - int stream_number; - int nstreams; - int init_seed; - int parameter; - int narrays; - /*** declare other variables here ***/ + int rng_type; + char *gentype; + int stream_number; + int nstreams; + int init_seed; + int parameter; + int narrays; + /*** declare other variables here ***/ #ifdef LONG64 unsigned LONG64 mult, x; #else - unsigned long r[2], a[2]; - int a_size; /* length of array 'a' */ + unsigned long r[2], a[2]; + int a_size; /* length of array 'a' */ #endif - BigNum k, si; -}; + BigNum k, si; + }; } #endif - - -/*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ + +/*********************************************************************************** + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/SRC/primelist_32.h sprng5/SRC/primelist_32.h --- sprng5.orig/SRC/primelist_32.h 2014-08-25 17:56:46.000000000 +0000 +++ sprng5/SRC/primelist_32.h 2021-01-15 16:26:40.000000000 +0000 @@ -2,1795 +2,255 @@ #define STEP 1000 #define PRIMELISTSIZE2 1778 -int prime_list_32[PRIMELISTSIZE2] = -{ -11863279, -11863259, -11863253, -11863249, -11863237, -11863213, -11863207, -11863183, -11863171, -11863153, -11863151, -11863133, -11863121, -11863109, -11863099, -11863073, -11863067, -11863057, -11863039, -11863037, -11863031, -11863021, -11862989, -11862979, -11862959, -11862919, -11862911, -11862881, -11862869, -11862857, -11862839, -11862803, -11862791, -11862761, -11862713, -11862703, -11862701, -11862679, -11862673, -11862661, -11862623, -11862611, -11862581, -11862577, -11862569, -11862563, -11862547, -11862527, -11862493, -11862469, -11862439, -11862391, -11862373, -11862343, -11862317, -11862313, -11862307, -11862293, -11862271, -11862269, -11862259, -11862241, -11862239, -11862233, -11862229, -11862223, -11862217, -11862203, -11862199, -11862167, -11862157, -11862083, -11862049, -11862031, -11862029, -11862013, -11862007, -11861987, -11861959, -11861953, -11861921, -11861917, -11861887, -11861879, -11861873, -11861849, -11861827, -11861819, -11861803, -11861791, -11861749, -11861713, -11861711, -11861701, -11861693, -11861687, -11861683, -11861671, -11861659, -11861639, -11861627, -11861611, -11861599, -11861581, -11861579, -11861573, -11861569, -11861539, -11861527, -11861467, -11861441, -11861429, -11861413, -11861411, -11861407, -11861401, -11861371, -11861363, -11861357, -11861351, -11861327, -11861303, -11861299, -11861293, -11861273, -11861237, -11861231, -11861221, -11861219, -11861197, -11861191, -11861167, -11861159, -11861141, -11861131, -11861107, -11861099, -11861093, -11861089, -11861081, -11861071, -11861033, -11861011, -11860993, -11860973, -11860963, -11860897, -11860867, -11860859, -11860837, -11860811, -11860789, -11860787, -11860777, -11860753, -11860741, -11860727, -11860703, -11860699, -11860697, -11860691, -11860687, -11860669, -11860661, -11860649, -11860643, -11860637, -11860627, -11860619, -11860613, -11860573, -11860547, -11860517, -11860489, -11860487, -11860483, -11860477, -11860469, -11860411, -11860397, -11860379, -11860327, -11860267, -11860243, -11860231, -11860223, -11860207, -11860171, -11860151, -11860133, -11860109, -11860103, -11860097, -11860087, -11860081, -11860049, -11860039, -11860031, -11860021, -11859997, -11859989, -11859979, -11859961, -11859929, -11859923, -11859917, -11859907, -11859901, -11859893, -11859889, -11859877, -11859853, -11859847, -11859833, -11859821, -11859817, -11859791, -11859751, -11859739, -11859719, -11859713, -11859707, -11859643, -11859611, -11859583, -11859571, -11859569, -11859563, -11859541, -11859539, -11859509, -11859503, -11859487, -11859481, -11859473, -11859461, -11859457, -11859451, -11859433, -11859427, -11859383, -11859377, -11859371, -11859359, -11859349, -11859311, -11859307, -11859293, -11859269, -11859247, -11859241, -11859233, -11859187, -11859179, -11859167, -11859163, -11859157, -11859151, -11859139, -11859137, -11859109, -11859101, -11859083, -11859079, -11859077, -11859073, -11859061, -11859049, -11859031, -11859017, -11858989, -11858971, -11858969, -11858953, -11858947, -11858921, -11858897, -11858893, -11858851, -11858839, -11858813, -11858807, -11858801, -11858783, -11858779, -11858747, -11858729, -11858723, -11858719, -11858701, -11858683, -11858659, -11858657, -11858629, -11858599, -11858597, -11858579, -11858573, -11858569, -11858557, -11858551, -11858543, -11858533, -11858479, -11858447, -11858443, -11858423, -11858387, -11858381, -11858377, -11858359, -11858323, -11858311, -11858291, -11858281, -11858279, -11858269, -11858267, -11858243, -11858227, -11858201, -11858177, -11858159, -11858149, -11858131, -11858101, -11858059, -11858057, -11858051, -11858039, -11858029, -11858023, -11858017, -11857999, -11857991, -11857969, -11857931, -11857913, -11857907, -11857889, -11857883, -11857877, -11857873, -11857837, -11857831, -11857819, -11857817, -11857801, -11857793, -11857787, -11857777, -11857763, -11857759, -11857753, -11857751, -11857711, -11857709, -11857697, -11857693, -11857667, -11857661, -11857613, -11857591, -11857589, -11857543, -11857529, -11857523, -11857519, -11857499, -11857493, -11857481, -11857477, -11857457, -11857453, -11857451, -11857423, -11857409, -11857393, -11857369, -11857367, -11857361, -11857333, -11857331, -11857327, -11857303, -11857291, -11857267, -11857249, -11857243, -11857217, -11857193, -11857151, -11857147, -11857127, -11857123, -11857099, -11857093, -11857091, -11857081, -11857073, -11857067, -11857061, -11857049, -11857039, -11857037, -11857033, -11857003, -11856979, -11856953, -11856947, -11856919, -11856899, -11856883, -11856877, -11856857, -11856841, -11856821, -11856811, -11856763, -11856731, -11856727, -11856709, -11856697, -11856673, -11856659, -11856653, -11856641, -11856629, -11856583, -11856553, -11856547, -11856541, -11856517, -11856511, -11856479, -11856473, -11856469, -11856461, -11856419, -11856409, -11856373, -11856371, -11856359, -11856343, -11856329, -11856311, -11856307, -11856287, -11856281, -11856269, -11856239, -11856223, -11856199, -11856193, -11856179, -11856161, -11856151, -11856139, -11856113, -11856107, -11856101, -11856071, -11856049, -11856023, -11856001, -11855999, -11855993, -11855989, -11855959, -11855933, -11855911, -11855903, -11855881, -11855869, -11855839, -11855827, -11855813, -11855773, -11855759, -11855747, -11855743, -11855737, -11855731, -11855713, -11855699, -11855689, -11855687, -11855653, -11855633, -11855593, -11855581, -11855567, -11855551, -11855549, -11855531, -11855521, -11855507, -11855491, -11855489, -11855413, -11855407, -11855387, -11855383, -11855381, -11855359, -11855357, -11855353, -11855351, -11855339, -11855329, -11855321, -11855309, -11855303, -11855269, -11855267, -11855231, -11855219, -11855213, -11855177, -11855159, -11855149, -11855147, -11855141, -11855111, -11855033, -11855023, -11855017, -11855003, -11854979, -11854961, -11854937, -11854919, -11854901, -11854897, -11854891, -11854883, -11854877, -11854873, -11854853, -11854847, -11854813, -11854793, -11854757, -11854709, -11854691, -11854681, -11854607, -11854603, -11854573, -11854571, -11854567, -11854529, -11854523, -11854519, -11854517, -11854489, -11854477, -11854463, -11854441, -11854439, -11854433, -11854429, -11854411, -11854399, -11854379, -11854363, -11854333, -11854331, -11854327, -11854279, -11854267, -11854261, -11854211, -11854169, -11854163, -11854159, -11854147, -11854061, -11854057, -11854019, -11854009, -11854001, -11853991, -11853979, -11853943, -11853931, -11853899, -11853893, -11853889, -11853883, -11853869, -11853857, -11853847, -11853839, -11853817, -11853791, -11853773, -11853761, -11853757, -11853731, -11853719, -11853689, -11853679, -11853649, -11853629, -11853617, -11853613, -11853601, -11853571, -11853557, -11853529, -11853463, -11853451, -11853449, -11853427, -11853421, -11853419, -11853383, -11853367, -11853329, -11853323, -11853319, -11853241, -11853227, -11853221, -11853217, -11853203, -11853181, -11853161, -11853157, -11853133, -11853031, -11853019, -11853001, -11852989, -11852969, -11852959, -11852957, -11852921, -11852917, -11852891, -11852879, -11852873, -11852857, -11852837, -11852833, -11852831, -11852809, -11852807, -11852803, -11852773, -11852767, -11852759, -11852741, -11852719, -11852717, -11852663, -11852657, -11852647, -11852641, -11852623, -11852611, -11852609, -11852591, -11852579, -11852573, -11852557, -11852539, -11852537, -11852531, -11852513, -11852473, -11852459, -11852437, -11852369, -11852359, -11852341, -11852339, -11852327, -11852311, -11852303, -11852297, -11852293, -11852287, -11852279, -11852273, -11852263, -11852251, -11852237, -11852221, -11852209, -11852177, -11852171, -11852161, -11852147, -11852129, -11852089, -11852083, -11852059, -11852053, -11852051, -11852017, -11851997, -11851967, -11851949, -11851933, -11851927, -11851919, -11851909, -11851891, -11851867, -11851859, -11851841, -11851813, -11851799, -11851793, -11851787, -11851759, -11851753, -11851681, -11851673, -11851639, -11851621, -11851613, -11851603, -11851597, -11851591, -11851589, -11851577, -11851559, -11851549, -11851547, -11851529, -11851523, -11851519, -11851493, -11851481, -11851451, -11851447, -11851409, -11851403, -11851373, -11851361, -11851351, -11851349, -11851313, -11851303, -11851291, -11851219, -11851201, -11851181, -11851157, -11851139, -11851127, -11851123, -11851109, -11851093, -11851067, -11851051, -11851033, -11850997, -11850991, -11850983, -11850961, -11850953, -11850947, -11850941, -11850931, -11850919, -11850913, -11850907, -11850899, -11850877, -11850859, -11850829, -11850803, -11850791, -11850749, -11850739, -11850731, -11850701, -11850677, -11850667, -11850611, -11850607, -11850557, -11850541, -11850529, -11850511, -11850481, -11850469, -11850427, -11850407, -11850379, -11850373, -11850367, -11850347, -11850341, -11850283, -11850269, -11850259, -11850247, -11850233, -11850191, -11850169, -11850161, -11850133, -11850127, -11850121, -11850109, -11850103, -11850077, -11850073, -11850061, -11850049, -11850031, -11850023, -11850019, -11850011, -11850001, -11849987, -11849947, -11849933, -11849923, -11849909, -11849891, -11849881, -11849869, -11849813, -11849801, -11849791, -11849771, -11849767, -11849759, -11849743, -11849741, -11849723, -11849713, -11849707, -11849701, -11849699, -11849693, -11849689, -11849683, -11849671, -11849659, -11849653, -11849641, -11849633, -11849599, -11849587, -11849573, -11849569, -11849567, -11849557, -11849507, -11849503, -11849491, -11849473, -11849443, -11849437, -11849417, -11849413, -11849401, -11849399, -11849363, -11849359, -11849339, -11849309, -11849297, -11849291, -11849273, -11849269, -11849251, -11849249, -11849239, -11849237, -11849231, -11849203, -11849183, -11849177, -11849137, -11849129, -11849111, -11849107, -11849093, -11849087, -11849077, -11849069, -11849059, -11849053, -11849039, -11849021, -11848961, -11848937, -11848931, -11848919, -11848909, -11848873, -11848867, -11848861, -11848853, -11848829, -11848801, -11848787, -11848757, -11848751, -11848741, -11848729, -11848721, -11848717, -11848709, -11848691, -11848679, -11848673, -11848663, -11848637, -11848619, -11848601, -11848591, -11848589, -11848553, -11848537, -11848531, -11848523, -11848513, -11848493, -11848489, -11848477, -11848469, -11848451, -11848433, -11848393, -11848379, -11848373, -11848363, -11848351, -11848339, -11848313, -11848297, -11848271, -11848253, -11848247, -11848241, -11848237, -11848219, -11848181, -11848159, -11848157, -11848147, -11848129, -11848117, -11848093, -11848069, -11848043, -11848027, -11848021, -11847977, -11847961, -11847949, -11847907, -11847883, -11847877, -11847853, -11847799, -11847791, -11847761, -11847749, -11847721, -11847701, -11847653, -11847643, -11847637, -11847629, -11847607, -11847593, -11847587, -11847581, -11847571, -11847569, -11847533, -11847529, -11847527, -11847523, -11847499, -11847497, -11847467, -11847463, -11847427, -11847397, -11847391, -11847373, -11847347, -11847343, -11847299, -11847281, -11847271, -11847263, -11847257, -11847233, -11830253, -11814059, -11797861, -11781907, -11765609, -11749061, -11732887, -11716381, -11699993, -11684149, -11667269, -11651309, -11634739, -11618281, -11602949, -11586493, -11570407, -11554009, -11538067, -11522363, -11505511, -11489431, -11472817, -11457029, -11441081, -11424467, -11408317, -11392207, -11375563, -11359163, -11343187, -11326423, -11310521, -11293801, -11278019, -11261317, -11245081, -11228929, -11212433, -11196127, -11179907, -11163877, -11148019, -11131741, -11114879, -11098937, -11082817, -11066729, -11050939, -11034811, -11018591, -11001821, -10985479, -10969193, -10953181, -10937063, -10921171, -10904617, -10888811, -10872223, -10856141, -10840157, -10824139, -10807817, -10791629, -10775437, -10758619, -10742231, -10726003, -10709957, -10693897, -10677893, -10662257, -10646191, -10629929, -10613903, -10597597, -10581289, -10565047, -10549031, -10533073, -10516343, -10500547, -10484483, -10468361, -10452551, -10436291, -10420139, -10403951, -10388171, -10371899, -10356113, -10339639, -10323751, -10307537, -10291129, -10274821, -10259153, -10243201, -10226893, -10210831, -10194593, -10178017, -10161439, -10145197, -10129397, -10113241, -10097149, -10080997, -10064671, -10048859, -10033087, -10017113, -10000987, -9984587, -9968117, -9951703, -9935437, -9919439, -9903083, -9887179, -9870853, -9854791, -9838123, -9821809, -9805793, -9790177, -9774007, -9757703, -9741377, -9725707, -9709379, -9693031, -9677027, -9661009, -9645131, -9628939, -9613127, -9596597, -9581053, -9565291, -9548909, -9533023, -9516809, -9500993, -9484931, -9468793, -9452269, -9436439, -9419909, -9403967, -9387671, -9371371, -9355471, -9339569, -9323669, -9307513, -9291539, -9275377, -9259109, -9243281, -9227321, -9211759, -9195671, -9179591, -9163981, -9147521, -9131957, -9115709, -9099589, -9083521, -9067631, -9051563, -9035357, -9019259, -9002717, -8986751, -8970821, -8954321, -8938301, -8922611, -8907077, -8890823, -8874659, -8858677, -8842541, -8826221, -8810147, -8794081, -8778299, -8762357, -8746637, -8730467, -8714551, -8698813, -8683159, -8666773, -8651117, -8635049, -8618861, -8603183, -8587127, -8571509, -8555317, -8539747, -8523787, -8508217, -8492329, -8476723, -8460533, -8444671, -8428289, -8412169, -8396111, -8380237, -8364329, -8348107, -8332547, -8316449, -8300603, -8284447, -8268907, -8252551, -8236729, -8220881, -8205163, -8189123, -8173427, -8157343, -8141753, -8125373, -8109887, -8093707, -8077463, -8061421, -8045669, -8029717, -8013701, -7997623, -7981837, -7965871, -7949731, -7934089, -7918123, -7902269, -7886297, -7870657, -7854667, -7839269, -7823279, -7807549, -7791857, -7775479, -7759813, -7743737, -7727477, -7711741, -7695707, -7680181, -7664311, -7648439, -7632511, -7616881, -7601081, -7585639, -7569469, -7553437, -7537903, -7521949, -7505863, -7489847, -7474381, -7457993, -7442333, -7426421, -7410857, -7394873, -7378687, -7363123, -7347521, -7331309, -7315673, -7299493, -7283833, -7268039, -7252381, -7236821, -7220921, -7204891, -7189333, -7173233, -7157429, -7141759, -7125413, -7109423, -7094023, -7078283, -7062529, -7046581, -7031281, -7015973, -6999823, -6984193, -6968123, -6952441, -6937027, -6921281, -6905713, -6889789, -6874223, -6858913, -6843289, -6827543, -6811877, -6796591, -6780271, -6764353, -6748897, -6733171, -6717493, -6702197, -6686663, -6670709, -6654877, -6639049, -6622999, -6607379, -6591811, -6576307, -6560669, -6545171, -6529403, -6513613, -6498169, -6482407, -6466487, -6451087, -6435179, -6419299, -6403739, -6388061, -6371879, -6355963, -6340043, -6324401, -6308737, -6293681, -6278309, -6262721, -6247243, -6231497, -6215617, -6199847, -6184289, -6168353, -6152869, -6137477, -6121681, -6105949, -6090569, -6074779, -6058963, -6043417, -6027277, -6011899, -5996687, -5981071, -5965021, -5949313, -5933713, -5918293, -5903251, -5887631, -5872549, -5856709, -5841373, -5825711, -5809861, -5794457, -5778673, -5762759, -5747227, -5731463, -5716021, -5700451, -5685413, -5669803, -5654083, -5638103, -5622731, -5607149, -5591459, -5575601, -5560327, -5544613, -5529079, -5513267, -5497711, -5481989, -5466217, -5450773, -5435533, -5420083, -5404433, -5388689, -5373607, -5357903, -5342327, -5327041, -5311511, -5295839, -5280367, -5264821, -5249411, -5234237, -5218721, -5203477, -5188123, -5172227, -5156839, -5141117, -5125871, -5110561, -5094841, -5079493, -5064119, -5048741, -5033053, -5017637, -5001923, -4986439, -4971409, -4956151, -4940843, -4925419, -4909859, -4894753, -4879937, -4864511, -4849081, -4833989, -4818287, -4803031, -4787569, -4771999, -4756649, -4740979, -4725673, -4710373, -4695079, -4679813, -4664641, -4649119, -4633693, -4618307, -4603031, -4587589, -4572383, -4556933, -4541819, -4526363, -4510687, -4495079, -4480183, -4464877, -4449617, -4434811, -4419773, -4404679, -4389223, -4373647, -4358659, -4342991, -4327621, -4312381, -4297201, -4281481, -4265903, -4250777, -4235411, -4220207, -4204903, -4189583, -4174601, -4159471, -4144267, -4128763, -4113127, -4097957, -4082909, -4067741, -4052383, -4037521, -4022587, -4007447, -3992159, -3976481, -3961229, -3945919, -3930611, -3915761, -3900509, -3885691, -3870299, -3854969, -3839923, -3824591, -3809959, -3794941, -3779443, -3764311, -3748879, -3733397, -3718837, -3703643, -3688757, -3673793, -3658769, -3643331, -3628057, -3613201, -3598691, -3583757, -3568259, -3553453, -3538027, -3522763, -3507587, -3492287, -3476783, -3461291, -3445801, -3431353, -3416267, -3401509, -3386563, -3371419, -3356389, -3341101, -3325991, -3311051, -3295883, -3280759, -3265861, -3250837, -3235819, -3220967, -3206311, -3191603, -3176821, -3162059, -3147101, -3131761, -3117031, -3102371, -3087239, -3072533, -3057647, -3042493, -3027347, -3012137, -2997509, -2982583, -2967647, -2952629, -2937611, -2922677, -2907871, -2892973, -2877899, -2862917, -2847893, -2833211, -2818451, -2804027, -2789327, -2774309, -2759621, -2744551, -2729563, -2714629, -2699903, -2685323, -2670533, -2655571, -2641063, -2626307, -2611597, -2596501, -2581697, -2567447, -2552657, -2537779, -2523163, -2508281, -2493767, -2478937, -2464009, -2449417, -2434681, -2419793, -2405069, -2390207, -2375921, -2361167, -2346473, -2331689, -2316593, -2301709, -2287249, -2272241, -2258083, -2243551, -2228797, -2214161, -2199623, -2184779, -2170153, -2155603, -2141149, -2126623, -2111933, -2097539, -2082917, -2068201, -2053789, -2038969, -2024417, -2010017, -1995977, -1981523, -1966619, -1952023, -1937657, -1923253, -1908923, -1894127, -1879949, -1865509, -1851503, -1836943, -1822703, -1808071, -1793927, -1779497, -1765187, -1750423, -1736281, -1721659, -1707253, -1692967, -1678429, -1664501, -1650059, -1635317, -1621421, -1606897, -1592881, -1578217, -1563967, -1549577, -1535459, -1520707, -1506497, -1492499, -1478467, -1464173, -1450139, -1435919, -1422163, -1407569, -1393663, -1379321, -1365281, -1351199, -1336997, -1322693, -1308719, -1294483, -1280453, -1266281, -1252469, -1238551, -1224193, -1210369, -1195771, -1181963, -1168231, -1154633, -1140563, -1126693, -1112483, -1099051, -1085023, -1071229, -1057279, -1043201, -1029179, -1015451, -1001821, -988061, -973901, -960293, -946133, -932357, -918677, -905071, -891239, -877469, -864013, -850247, -836477, -822883, -809423, -795737, -782191, -768671, -755309, -741509, -728003, -714563, -701341, -687679, -674363, -660893, -647557, -634031, -620363, -607127, -593899, -580733, -567659, -554167, -540863, -527441, -514561, -501217, -488347, -475283, -462493, -449161, -435889, -423257, -410341, -397223, -384407, -371573, -358471, -345769, -333019, -320317, -307873, -295291, -282427, -269947, -257501, -245083, -232523, -220327, -208049, -195787, -183683, -171673, -159499, -147551, -135649, -123853, -112223, -100547, -89203, -77719, -66587, -55589, -44633, -34019, -23741, -13877, -4733 -}; - - -/*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ +int prime_list_32[PRIMELISTSIZE2] = + { 11863279, 11863259, 11863253, 11863249, 11863237, 11863213, 11863207, + 11863183, 11863171, 11863153, 11863151, 11863133, 11863121, 11863109, + 11863099, 11863073, 11863067, 11863057, 11863039, 11863037, 11863031, + 11863021, 11862989, 11862979, 11862959, 11862919, 11862911, 11862881, + 11862869, 11862857, 11862839, 11862803, 11862791, 11862761, 11862713, + 11862703, 11862701, 11862679, 11862673, 11862661, 11862623, 11862611, + 11862581, 11862577, 11862569, 11862563, 11862547, 11862527, 11862493, + 11862469, 11862439, 11862391, 11862373, 11862343, 11862317, 11862313, + 11862307, 11862293, 11862271, 11862269, 11862259, 11862241, 11862239, + 11862233, 11862229, 11862223, 11862217, 11862203, 11862199, 11862167, + 11862157, 11862083, 11862049, 11862031, 11862029, 11862013, 11862007, + 11861987, 11861959, 11861953, 11861921, 11861917, 11861887, 11861879, + 11861873, 11861849, 11861827, 11861819, 11861803, 11861791, 11861749, + 11861713, 11861711, 11861701, 11861693, 11861687, 11861683, 11861671, + 11861659, 11861639, 11861627, 11861611, 11861599, 11861581, 11861579, + 11861573, 11861569, 11861539, 11861527, 11861467, 11861441, 11861429, + 11861413, 11861411, 11861407, 11861401, 11861371, 11861363, 11861357, + 11861351, 11861327, 11861303, 11861299, 11861293, 11861273, 11861237, + 11861231, 11861221, 11861219, 11861197, 11861191, 11861167, 11861159, + 11861141, 11861131, 11861107, 11861099, 11861093, 11861089, 11861081, + 11861071, 11861033, 11861011, 11860993, 11860973, 11860963, 11860897, + 11860867, 11860859, 11860837, 11860811, 11860789, 11860787, 11860777, + 11860753, 11860741, 11860727, 11860703, 11860699, 11860697, 11860691, + 11860687, 11860669, 11860661, 11860649, 11860643, 11860637, 11860627, + 11860619, 11860613, 11860573, 11860547, 11860517, 11860489, 11860487, + 11860483, 11860477, 11860469, 11860411, 11860397, 11860379, 11860327, + 11860267, 11860243, 11860231, 11860223, 11860207, 11860171, 11860151, + 11860133, 11860109, 11860103, 11860097, 11860087, 11860081, 11860049, + 11860039, 11860031, 11860021, 11859997, 11859989, 11859979, 11859961, + 11859929, 11859923, 11859917, 11859907, 11859901, 11859893, 11859889, + 11859877, 11859853, 11859847, 11859833, 11859821, 11859817, 11859791, + 11859751, 11859739, 11859719, 11859713, 11859707, 11859643, 11859611, + 11859583, 11859571, 11859569, 11859563, 11859541, 11859539, 11859509, + 11859503, 11859487, 11859481, 11859473, 11859461, 11859457, 11859451, + 11859433, 11859427, 11859383, 11859377, 11859371, 11859359, 11859349, + 11859311, 11859307, 11859293, 11859269, 11859247, 11859241, 11859233, + 11859187, 11859179, 11859167, 11859163, 11859157, 11859151, 11859139, + 11859137, 11859109, 11859101, 11859083, 11859079, 11859077, 11859073, + 11859061, 11859049, 11859031, 11859017, 11858989, 11858971, 11858969, + 11858953, 11858947, 11858921, 11858897, 11858893, 11858851, 11858839, + 11858813, 11858807, 11858801, 11858783, 11858779, 11858747, 11858729, + 11858723, 11858719, 11858701, 11858683, 11858659, 11858657, 11858629, + 11858599, 11858597, 11858579, 11858573, 11858569, 11858557, 11858551, + 11858543, 11858533, 11858479, 11858447, 11858443, 11858423, 11858387, + 11858381, 11858377, 11858359, 11858323, 11858311, 11858291, 11858281, + 11858279, 11858269, 11858267, 11858243, 11858227, 11858201, 11858177, + 11858159, 11858149, 11858131, 11858101, 11858059, 11858057, 11858051, + 11858039, 11858029, 11858023, 11858017, 11857999, 11857991, 11857969, + 11857931, 11857913, 11857907, 11857889, 11857883, 11857877, 11857873, + 11857837, 11857831, 11857819, 11857817, 11857801, 11857793, 11857787, + 11857777, 11857763, 11857759, 11857753, 11857751, 11857711, 11857709, + 11857697, 11857693, 11857667, 11857661, 11857613, 11857591, 11857589, + 11857543, 11857529, 11857523, 11857519, 11857499, 11857493, 11857481, + 11857477, 11857457, 11857453, 11857451, 11857423, 11857409, 11857393, + 11857369, 11857367, 11857361, 11857333, 11857331, 11857327, 11857303, + 11857291, 11857267, 11857249, 11857243, 11857217, 11857193, 11857151, + 11857147, 11857127, 11857123, 11857099, 11857093, 11857091, 11857081, + 11857073, 11857067, 11857061, 11857049, 11857039, 11857037, 11857033, + 11857003, 11856979, 11856953, 11856947, 11856919, 11856899, 11856883, + 11856877, 11856857, 11856841, 11856821, 11856811, 11856763, 11856731, + 11856727, 11856709, 11856697, 11856673, 11856659, 11856653, 11856641, + 11856629, 11856583, 11856553, 11856547, 11856541, 11856517, 11856511, + 11856479, 11856473, 11856469, 11856461, 11856419, 11856409, 11856373, + 11856371, 11856359, 11856343, 11856329, 11856311, 11856307, 11856287, + 11856281, 11856269, 11856239, 11856223, 11856199, 11856193, 11856179, + 11856161, 11856151, 11856139, 11856113, 11856107, 11856101, 11856071, + 11856049, 11856023, 11856001, 11855999, 11855993, 11855989, 11855959, + 11855933, 11855911, 11855903, 11855881, 11855869, 11855839, 11855827, + 11855813, 11855773, 11855759, 11855747, 11855743, 11855737, 11855731, + 11855713, 11855699, 11855689, 11855687, 11855653, 11855633, 11855593, + 11855581, 11855567, 11855551, 11855549, 11855531, 11855521, 11855507, + 11855491, 11855489, 11855413, 11855407, 11855387, 11855383, 11855381, + 11855359, 11855357, 11855353, 11855351, 11855339, 11855329, 11855321, + 11855309, 11855303, 11855269, 11855267, 11855231, 11855219, 11855213, + 11855177, 11855159, 11855149, 11855147, 11855141, 11855111, 11855033, + 11855023, 11855017, 11855003, 11854979, 11854961, 11854937, 11854919, + 11854901, 11854897, 11854891, 11854883, 11854877, 11854873, 11854853, + 11854847, 11854813, 11854793, 11854757, 11854709, 11854691, 11854681, + 11854607, 11854603, 11854573, 11854571, 11854567, 11854529, 11854523, + 11854519, 11854517, 11854489, 11854477, 11854463, 11854441, 11854439, + 11854433, 11854429, 11854411, 11854399, 11854379, 11854363, 11854333, + 11854331, 11854327, 11854279, 11854267, 11854261, 11854211, 11854169, + 11854163, 11854159, 11854147, 11854061, 11854057, 11854019, 11854009, + 11854001, 11853991, 11853979, 11853943, 11853931, 11853899, 11853893, + 11853889, 11853883, 11853869, 11853857, 11853847, 11853839, 11853817, + 11853791, 11853773, 11853761, 11853757, 11853731, 11853719, 11853689, + 11853679, 11853649, 11853629, 11853617, 11853613, 11853601, 11853571, + 11853557, 11853529, 11853463, 11853451, 11853449, 11853427, 11853421, + 11853419, 11853383, 11853367, 11853329, 11853323, 11853319, 11853241, + 11853227, 11853221, 11853217, 11853203, 11853181, 11853161, 11853157, + 11853133, 11853031, 11853019, 11853001, 11852989, 11852969, 11852959, + 11852957, 11852921, 11852917, 11852891, 11852879, 11852873, 11852857, + 11852837, 11852833, 11852831, 11852809, 11852807, 11852803, 11852773, + 11852767, 11852759, 11852741, 11852719, 11852717, 11852663, 11852657, + 11852647, 11852641, 11852623, 11852611, 11852609, 11852591, 11852579, + 11852573, 11852557, 11852539, 11852537, 11852531, 11852513, 11852473, + 11852459, 11852437, 11852369, 11852359, 11852341, 11852339, 11852327, + 11852311, 11852303, 11852297, 11852293, 11852287, 11852279, 11852273, + 11852263, 11852251, 11852237, 11852221, 11852209, 11852177, 11852171, + 11852161, 11852147, 11852129, 11852089, 11852083, 11852059, 11852053, + 11852051, 11852017, 11851997, 11851967, 11851949, 11851933, 11851927, + 11851919, 11851909, 11851891, 11851867, 11851859, 11851841, 11851813, + 11851799, 11851793, 11851787, 11851759, 11851753, 11851681, 11851673, + 11851639, 11851621, 11851613, 11851603, 11851597, 11851591, 11851589, + 11851577, 11851559, 11851549, 11851547, 11851529, 11851523, 11851519, + 11851493, 11851481, 11851451, 11851447, 11851409, 11851403, 11851373, + 11851361, 11851351, 11851349, 11851313, 11851303, 11851291, 11851219, + 11851201, 11851181, 11851157, 11851139, 11851127, 11851123, 11851109, + 11851093, 11851067, 11851051, 11851033, 11850997, 11850991, 11850983, + 11850961, 11850953, 11850947, 11850941, 11850931, 11850919, 11850913, + 11850907, 11850899, 11850877, 11850859, 11850829, 11850803, 11850791, + 11850749, 11850739, 11850731, 11850701, 11850677, 11850667, 11850611, + 11850607, 11850557, 11850541, 11850529, 11850511, 11850481, 11850469, + 11850427, 11850407, 11850379, 11850373, 11850367, 11850347, 11850341, + 11850283, 11850269, 11850259, 11850247, 11850233, 11850191, 11850169, + 11850161, 11850133, 11850127, 11850121, 11850109, 11850103, 11850077, + 11850073, 11850061, 11850049, 11850031, 11850023, 11850019, 11850011, + 11850001, 11849987, 11849947, 11849933, 11849923, 11849909, 11849891, + 11849881, 11849869, 11849813, 11849801, 11849791, 11849771, 11849767, + 11849759, 11849743, 11849741, 11849723, 11849713, 11849707, 11849701, + 11849699, 11849693, 11849689, 11849683, 11849671, 11849659, 11849653, + 11849641, 11849633, 11849599, 11849587, 11849573, 11849569, 11849567, + 11849557, 11849507, 11849503, 11849491, 11849473, 11849443, 11849437, + 11849417, 11849413, 11849401, 11849399, 11849363, 11849359, 11849339, + 11849309, 11849297, 11849291, 11849273, 11849269, 11849251, 11849249, + 11849239, 11849237, 11849231, 11849203, 11849183, 11849177, 11849137, + 11849129, 11849111, 11849107, 11849093, 11849087, 11849077, 11849069, + 11849059, 11849053, 11849039, 11849021, 11848961, 11848937, 11848931, + 11848919, 11848909, 11848873, 11848867, 11848861, 11848853, 11848829, + 11848801, 11848787, 11848757, 11848751, 11848741, 11848729, 11848721, + 11848717, 11848709, 11848691, 11848679, 11848673, 11848663, 11848637, + 11848619, 11848601, 11848591, 11848589, 11848553, 11848537, 11848531, + 11848523, 11848513, 11848493, 11848489, 11848477, 11848469, 11848451, + 11848433, 11848393, 11848379, 11848373, 11848363, 11848351, 11848339, + 11848313, 11848297, 11848271, 11848253, 11848247, 11848241, 11848237, + 11848219, 11848181, 11848159, 11848157, 11848147, 11848129, 11848117, + 11848093, 11848069, 11848043, 11848027, 11848021, 11847977, 11847961, + 11847949, 11847907, 11847883, 11847877, 11847853, 11847799, 11847791, + 11847761, 11847749, 11847721, 11847701, 11847653, 11847643, 11847637, + 11847629, 11847607, 11847593, 11847587, 11847581, 11847571, 11847569, + 11847533, 11847529, 11847527, 11847523, 11847499, 11847497, 11847467, + 11847463, 11847427, 11847397, 11847391, 11847373, 11847347, 11847343, + 11847299, 11847281, 11847271, 11847263, 11847257, 11847233, 11830253, + 11814059, 11797861, 11781907, 11765609, 11749061, 11732887, 11716381, + 11699993, 11684149, 11667269, 11651309, 11634739, 11618281, 11602949, + 11586493, 11570407, 11554009, 11538067, 11522363, 11505511, 11489431, + 11472817, 11457029, 11441081, 11424467, 11408317, 11392207, 11375563, + 11359163, 11343187, 11326423, 11310521, 11293801, 11278019, 11261317, + 11245081, 11228929, 11212433, 11196127, 11179907, 11163877, 11148019, + 11131741, 11114879, 11098937, 11082817, 11066729, 11050939, 11034811, + 11018591, 11001821, 10985479, 10969193, 10953181, 10937063, 10921171, + 10904617, 10888811, 10872223, 10856141, 10840157, 10824139, 10807817, + 10791629, 10775437, 10758619, 10742231, 10726003, 10709957, 10693897, + 10677893, 10662257, 10646191, 10629929, 10613903, 10597597, 10581289, + 10565047, 10549031, 10533073, 10516343, 10500547, 10484483, 10468361, + 10452551, 10436291, 10420139, 10403951, 10388171, 10371899, 10356113, + 10339639, 10323751, 10307537, 10291129, 10274821, 10259153, 10243201, + 10226893, 10210831, 10194593, 10178017, 10161439, 10145197, 10129397, + 10113241, 10097149, 10080997, 10064671, 10048859, 10033087, 10017113, + 10000987, 9984587, 9968117, 9951703, 9935437, 9919439, 9903083, 9887179, + 9870853, 9854791, 9838123, 9821809, 9805793, 9790177, 9774007, 9757703, + 9741377, 9725707, 9709379, 9693031, 9677027, 9661009, 9645131, 9628939, + 9613127, 9596597, 9581053, 9565291, 9548909, 9533023, 9516809, 9500993, + 9484931, 9468793, 9452269, 9436439, 9419909, 9403967, 9387671, 9371371, + 9355471, 9339569, 9323669, 9307513, 9291539, 9275377, 9259109, 9243281, + 9227321, 9211759, 9195671, 9179591, 9163981, 9147521, 9131957, 9115709, + 9099589, 9083521, 9067631, 9051563, 9035357, 9019259, 9002717, 8986751, + 8970821, 8954321, 8938301, 8922611, 8907077, 8890823, 8874659, 8858677, + 8842541, 8826221, 8810147, 8794081, 8778299, 8762357, 8746637, 8730467, + 8714551, 8698813, 8683159, 8666773, 8651117, 8635049, 8618861, 8603183, + 8587127, 8571509, 8555317, 8539747, 8523787, 8508217, 8492329, 8476723, + 8460533, 8444671, 8428289, 8412169, 8396111, 8380237, 8364329, 8348107, + 8332547, 8316449, 8300603, 8284447, 8268907, 8252551, 8236729, 8220881, + 8205163, 8189123, 8173427, 8157343, 8141753, 8125373, 8109887, 8093707, + 8077463, 8061421, 8045669, 8029717, 8013701, 7997623, 7981837, 7965871, + 7949731, 7934089, 7918123, 7902269, 7886297, 7870657, 7854667, 7839269, + 7823279, 7807549, 7791857, 7775479, 7759813, 7743737, 7727477, 7711741, + 7695707, 7680181, 7664311, 7648439, 7632511, 7616881, 7601081, 7585639, + 7569469, 7553437, 7537903, 7521949, 7505863, 7489847, 7474381, 7457993, + 7442333, 7426421, 7410857, 7394873, 7378687, 7363123, 7347521, 7331309, + 7315673, 7299493, 7283833, 7268039, 7252381, 7236821, 7220921, 7204891, + 7189333, 7173233, 7157429, 7141759, 7125413, 7109423, 7094023, 7078283, + 7062529, 7046581, 7031281, 7015973, 6999823, 6984193, 6968123, 6952441, + 6937027, 6921281, 6905713, 6889789, 6874223, 6858913, 6843289, 6827543, + 6811877, 6796591, 6780271, 6764353, 6748897, 6733171, 6717493, 6702197, + 6686663, 6670709, 6654877, 6639049, 6622999, 6607379, 6591811, 6576307, + 6560669, 6545171, 6529403, 6513613, 6498169, 6482407, 6466487, 6451087, + 6435179, 6419299, 6403739, 6388061, 6371879, 6355963, 6340043, 6324401, + 6308737, 6293681, 6278309, 6262721, 6247243, 6231497, 6215617, 6199847, + 6184289, 6168353, 6152869, 6137477, 6121681, 6105949, 6090569, 6074779, + 6058963, 6043417, 6027277, 6011899, 5996687, 5981071, 5965021, 5949313, + 5933713, 5918293, 5903251, 5887631, 5872549, 5856709, 5841373, 5825711, + 5809861, 5794457, 5778673, 5762759, 5747227, 5731463, 5716021, 5700451, + 5685413, 5669803, 5654083, 5638103, 5622731, 5607149, 5591459, 5575601, + 5560327, 5544613, 5529079, 5513267, 5497711, 5481989, 5466217, 5450773, + 5435533, 5420083, 5404433, 5388689, 5373607, 5357903, 5342327, 5327041, + 5311511, 5295839, 5280367, 5264821, 5249411, 5234237, 5218721, 5203477, + 5188123, 5172227, 5156839, 5141117, 5125871, 5110561, 5094841, 5079493, + 5064119, 5048741, 5033053, 5017637, 5001923, 4986439, 4971409, 4956151, + 4940843, 4925419, 4909859, 4894753, 4879937, 4864511, 4849081, 4833989, + 4818287, 4803031, 4787569, 4771999, 4756649, 4740979, 4725673, 4710373, + 4695079, 4679813, 4664641, 4649119, 4633693, 4618307, 4603031, 4587589, + 4572383, 4556933, 4541819, 4526363, 4510687, 4495079, 4480183, 4464877, + 4449617, 4434811, 4419773, 4404679, 4389223, 4373647, 4358659, 4342991, + 4327621, 4312381, 4297201, 4281481, 4265903, 4250777, 4235411, 4220207, + 4204903, 4189583, 4174601, 4159471, 4144267, 4128763, 4113127, 4097957, + 4082909, 4067741, 4052383, 4037521, 4022587, 4007447, 3992159, 3976481, + 3961229, 3945919, 3930611, 3915761, 3900509, 3885691, 3870299, 3854969, + 3839923, 3824591, 3809959, 3794941, 3779443, 3764311, 3748879, 3733397, + 3718837, 3703643, 3688757, 3673793, 3658769, 3643331, 3628057, 3613201, + 3598691, 3583757, 3568259, 3553453, 3538027, 3522763, 3507587, 3492287, + 3476783, 3461291, 3445801, 3431353, 3416267, 3401509, 3386563, 3371419, + 3356389, 3341101, 3325991, 3311051, 3295883, 3280759, 3265861, 3250837, + 3235819, 3220967, 3206311, 3191603, 3176821, 3162059, 3147101, 3131761, + 3117031, 3102371, 3087239, 3072533, 3057647, 3042493, 3027347, 3012137, + 2997509, 2982583, 2967647, 2952629, 2937611, 2922677, 2907871, 2892973, + 2877899, 2862917, 2847893, 2833211, 2818451, 2804027, 2789327, 2774309, + 2759621, 2744551, 2729563, 2714629, 2699903, 2685323, 2670533, 2655571, + 2641063, 2626307, 2611597, 2596501, 2581697, 2567447, 2552657, 2537779, + 2523163, 2508281, 2493767, 2478937, 2464009, 2449417, 2434681, 2419793, + 2405069, 2390207, 2375921, 2361167, 2346473, 2331689, 2316593, 2301709, + 2287249, 2272241, 2258083, 2243551, 2228797, 2214161, 2199623, 2184779, + 2170153, 2155603, 2141149, 2126623, 2111933, 2097539, 2082917, 2068201, + 2053789, 2038969, 2024417, 2010017, 1995977, 1981523, 1966619, 1952023, + 1937657, 1923253, 1908923, 1894127, 1879949, 1865509, 1851503, 1836943, + 1822703, 1808071, 1793927, 1779497, 1765187, 1750423, 1736281, 1721659, + 1707253, 1692967, 1678429, 1664501, 1650059, 1635317, 1621421, 1606897, + 1592881, 1578217, 1563967, 1549577, 1535459, 1520707, 1506497, 1492499, + 1478467, 1464173, 1450139, 1435919, 1422163, 1407569, 1393663, 1379321, + 1365281, 1351199, 1336997, 1322693, 1308719, 1294483, 1280453, 1266281, + 1252469, 1238551, 1224193, 1210369, 1195771, 1181963, 1168231, 1154633, + 1140563, 1126693, 1112483, 1099051, 1085023, 1071229, 1057279, 1043201, + 1029179, 1015451, 1001821, 988061, 973901, 960293, 946133, 932357, 918677, + 905071, 891239, 877469, 864013, 850247, 836477, 822883, 809423, 795737, + 782191, 768671, 755309, 741509, 728003, 714563, 701341, 687679, 674363, + 660893, 647557, 634031, 620363, 607127, 593899, 580733, 567659, 554167, + 540863, 527441, 514561, 501217, 488347, 475283, 462493, 449161, 435889, + 423257, 410341, 397223, 384407, 371573, 358471, 345769, 333019, 320317, + 307873, 295291, 282427, 269947, 257501, 245083, 232523, 220327, 208049, + 195787, 183683, 171673, 159499, 147551, 135649, 123853, 112223, 100547, + 89203, 77719, 66587, 55589, 44633, 34019, 23741, 13877, 4733 }; + +/*********************************************************************************** + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/SRC/primelist_64.h sprng5/SRC/primelist_64.h --- sprng5.orig/SRC/primelist_64.h 2014-08-25 17:56:46.000000000 +0000 +++ sprng5/SRC/primelist_64.h 2021-01-15 16:28:24.000000000 +0000 @@ -2,15631 +2,2966 @@ #define STEP 10000 #define PRIMELISTSIZE2 15613 -unsigned int prime_list_64[PRIMELISTSIZE2] = -{ -3037000493U, -3037000453U, -3037000429U, -3037000427U, -3037000399U, -3037000391U, -3037000333U, -3037000331U, -3037000303U, -3037000289U, -3037000249U, -3037000193U, -3037000181U, -3037000177U, -3037000159U, -3037000121U, -3037000111U, -3037000103U, -3037000069U, -3037000039U, -3037000013U, -3036999991U, -3036999983U, -3036999941U, -3036999899U, -3036999887U, -3036999877U, -3036999841U, -3036999821U, -3036999817U, -3036999811U, -3036999803U, -3036999773U, -3036999769U, -3036999761U, -3036999739U, -3036999737U, -3036999733U, -3036999727U, -3036999499U, -3036999487U, -3036999473U, -3036999467U, -3036999457U, -3036999443U, -3036999439U, -3036999431U, -3036999403U, -3036999379U, -3036999341U, -3036999319U, -3036999307U, -3036999293U, -3036999283U, -3036999271U, -3036999233U, -3036999209U, -3036999167U, -3036999157U, -3036999137U, -3036999113U, -3036999101U, -3036999089U, -3036999079U, -3036999067U, -3036999061U, -3036999023U, -3036999019U, -3036999001U, -3036998999U, -3036998989U, -3036998977U, -3036998963U, -3036998957U, -3036998933U, -3036998903U, -3036998873U, -3036998857U, -3036998849U, -3036998843U, -3036998837U, -3036998803U, -3036998777U, -3036998761U, -3036998759U, -3036998743U, -3036998717U, -3036998611U, -3036998599U, -3036998567U, -3036998563U, -3036998561U, -3036998537U, -3036998477U, -3036998449U, -3036998429U, -3036998401U, -3036998381U, -3036998347U, -3036998333U, -3036998329U, -3036998299U, -3036998267U, -3036998257U, -3036998249U, -3036998231U, -3036998213U, -3036998183U, -3036998161U, -3036998113U, -3036998093U, -3036998071U, -3036998051U, -3036998047U, -3036998011U, -3036998009U, -3036997973U, -3036997939U, -3036997933U, -3036997897U, -3036997853U, -3036997837U, -3036997813U, -3036997811U, -3036997787U, -3036997783U, -3036997751U, -3036997741U, -3036997727U, -3036997721U, -3036997709U, -3036997697U, -3036997693U, -3036997643U, -3036997631U, -3036997619U, -3036997603U, -3036997597U, -3036997577U, -3036997559U, -3036997511U, -3036997501U, -3036997493U, -3036997393U, -3036997391U, -3036997343U, -3036997339U, -3036997331U, -3036997289U, -3036997279U, -3036997217U, -3036997213U, -3036997169U, -3036997151U, -3036997133U, -3036997109U, -3036997081U, -3036997063U, -3036997021U, -3036996983U, -3036996947U, -3036996931U, -3036996923U, -3036996901U, -3036996883U, -3036996863U, -3036996829U, -3036996817U, -3036996799U, -3036996769U, -3036996761U, -3036996737U, -3036996713U, -3036996709U, -3036996707U, -3036996673U, -3036996631U, -3036996601U, -3036996587U, -3036996553U, -3036996527U, -3036996497U, -3036996491U, -3036996481U, -3036996451U, -3036996439U, -3036996421U, -3036996379U, -3036996373U, -3036996353U, -3036996349U, -3036996329U, -3036996307U, -3036996299U, -3036996283U, -3036996253U, -3036996247U, -3036996211U, -3036996197U, -3036996121U, -3036996091U, -3036996077U, -3036996071U, -3036996049U, -3036996019U, -3036996013U, -3036995981U, -3036995977U, -3036995953U, -3036995933U, -3036995921U, -3036995909U, -3036995893U, -3036995887U, -3036995881U, -3036995867U, -3036995839U, -3036995833U, -3036995827U, -3036995791U, -3036995761U, -3036995737U, -3036995723U, -3036995711U, -3036995671U, -3036995641U, -3036995627U, -3036995609U, -3036995603U, -3036995581U, -3036995579U, -3036995573U, -3036995543U, -3036995531U, -3036995527U, -3036995491U, -3036995477U, -3036995459U, -3036995369U, -3036995281U, -3036995267U, -3036995257U, -3036995249U, -3036995239U, -3036995189U, -3036995161U, -3036995153U, -3036995123U, -3036995089U, -3036995083U, -3036995057U, -3036995051U, -3036995041U, -3036995021U, -3036994997U, -3036994963U, -3036994931U, -3036994921U, -3036994897U, -3036994889U, -3036994879U, -3036994847U, -3036994799U, -3036994787U, -3036994777U, -3036994747U, -3036994717U, -3036994703U, -3036994679U, -3036994673U, -3036994663U, -3036994661U, -3036994627U, -3036994621U, -3036994619U, -3036994591U, -3036994549U, -3036994547U, -3036994531U, -3036994511U, -3036994507U, -3036994489U, -3036994469U, -3036994439U, -3036994423U, -3036994417U, -3036994397U, -3036994381U, -3036994369U, -3036994349U, -3036994327U, -3036994309U, -3036994283U, -3036994249U, -3036994237U, -3036994229U, -3036994211U, -3036994193U, -3036994141U, -3036994099U, -3036994073U, -3036994069U, -3036994063U, -3036994043U, -3036994039U, -3036994033U, -3036994001U, -3036993977U, -3036993937U, -3036993913U, -3036993901U, -3036993893U, -3036993871U, -3036993769U, -3036993737U, -3036993727U, -3036993719U, -3036993677U, -3036993667U, -3036993613U, -3036993607U, -3036993601U, -3036993587U, -3036993571U, -3036993569U, -3036993541U, -3036993539U, -3036993529U, -3036993527U, -3036993511U, -3036993469U, -3036993437U, -3036993413U, -3036993367U, -3036993359U, -3036993331U, -3036993329U, -3036993319U, -3036993283U, -3036993277U, -3036993257U, -3036993251U, -3036993241U, -3036993233U, -3036993221U, -3036993217U, -3036993181U, -3036993161U, -3036993143U, -3036993133U, -3036993131U, -3036993107U, -3036993103U, -3036993097U, -3036993083U, -3036993077U, -3036993073U, -3036993023U, -3036992983U, -3036992977U, -3036992969U, -3036992957U, -3036992953U, -3036992921U, -3036992899U, -3036992879U, -3036992873U, -3036992869U, -3036992809U, -3036992773U, -3036992753U, -3036992747U, -3036992743U, -3036992741U, -3036992731U, -3036992719U, -3036992711U, -3036992701U, -3036992681U, -3036992669U, -3036992639U, -3036992579U, -3036992521U, -3036992507U, -3036992503U, -3036992461U, -3036992437U, -3036992423U, -3036992401U, -3036992383U, -3036992377U, -3036992341U, -3036992333U, -3036992293U, -3036992291U, -3036992249U, -3036992207U, -3036992191U, -3036992141U, -3036992131U, -3036992113U, -3036992087U, -3036992083U, -3036992069U, -3036992051U, -3036992033U, -3036992017U, -3036992011U, -3036991987U, -3036991981U, -3036991949U, -3036991943U, -3036991897U, -3036991891U, -3036991883U, -3036991861U, -3036991777U, -3036991757U, -3036991753U, -3036991747U, -3036991717U, -3036991649U, -3036991627U, -3036991619U, -3036991591U, -3036991543U, -3036991511U, -3036991501U, -3036991481U, -3036991453U, -3036991381U, -3036991361U, -3036991357U, -3036991327U, -3036991303U, -3036991301U, -3036991271U, -3036991261U, -3036991253U, -3036991249U, -3036991247U, -3036991189U, -3036991183U, -3036991171U, -3036991147U, -3036991127U, -3036991109U, -3036991081U, -3036991063U, -3036991049U, -3036991037U, -3036991033U, -3036991031U, -3036991021U, -3036990997U, -3036990977U, -3036990961U, -3036990949U, -3036990923U, -3036990907U, -3036990899U, -3036990893U, -3036990871U, -3036990851U, -3036990829U, -3036990779U, -3036990769U, -3036990763U, -3036990739U, -3036990727U, -3036990709U, -3036990703U, -3036990611U, -3036990559U, -3036990491U, -3036990431U, -3036990421U, -3036990401U, -3036990391U, -3036990379U, -3036990371U, -3036990323U, -3036990317U, -3036990277U, -3036990263U, -3036990247U, -3036990233U, -3036990227U, -3036990199U, -3036990193U, -3036990167U, -3036990163U, -3036990157U, -3036990071U, -3036990059U, -3036990049U, -3036990037U, -3036990029U, -3036990017U, -3036989999U, -3036989993U, -3036989983U, -3036989957U, -3036989863U, -3036989821U, -3036989797U, -3036989779U, -3036989723U, -3036989693U, -3036989687U, -3036989651U, -3036989611U, -3036989609U, -3036989603U, -3036989573U, -3036989561U, -3036989539U, -3036989477U, -3036989471U, -3036989441U, -3036989419U, -3036989381U, -3036989377U, -3036989363U, -3036989357U, -3036989353U, -3036989323U, -3036989297U, -3036989281U, -3036989261U, -3036989209U, -3036989167U, -3036989159U, -3036989149U, -3036989129U, -3036989107U, -3036989101U, -3036989077U, -3036989071U, -3036989063U, -3036989041U, -3036989027U, -3036988991U, -3036988879U, -3036988849U, -3036988819U, -3036988751U, -3036988739U, -3036988729U, -3036988727U, -3036988723U, -3036988699U, -3036988679U, -3036988673U, -3036988667U, -3036988651U, -3036988637U, -3036988631U, -3036988627U, -3036988583U, -3036988573U, -3036988571U, -3036988543U, -3036988523U, -3036988483U, -3036988469U, -3036988429U, -3036988417U, -3036988399U, -3036988397U, -3036988393U, -3036988387U, -3036988369U, -3036988349U, -3036988319U, -3036988313U, -3036988309U, -3036988301U, -3036988277U, -3036988271U, -3036988117U, -3036988111U, -3036988109U, -3036988081U, -3036988079U, -3036988043U, -3036988037U, -3036988027U, -3036988021U, -3036987991U, -3036987979U, -3036987937U, -3036987931U, -3036987929U, -3036987917U, -3036987913U, -3036987901U, -3036987883U, -3036987871U, -3036987809U, -3036987799U, -3036987773U, -3036987743U, -3036987731U, -3036987727U, -3036987719U, -3036987691U, -3036987659U, -3036987637U, -3036987631U, -3036987601U, -3036987589U, -3036987587U, -3036987581U, -3036987563U, -3036987557U, -3036987553U, -3036987533U, -3036987529U, -3036987523U, -3036987521U, -3036987469U, -3036987439U, -3036987427U, -3036987361U, -3036987337U, -3036987319U, -3036987311U, -3036987293U, -3036987251U, -3036987241U, -3036987197U, -3036987167U, -3036987127U, -3036987089U, -3036987077U, -3036987073U, -3036987067U, -3036987061U, -3036987043U, -3036986969U, -3036986957U, -3036986917U, -3036986881U, -3036986863U, -3036986851U, -3036986839U, -3036986803U, -3036986791U, -3036986789U, -3036986767U, -3036986759U, -3036986737U, -3036986713U, -3036986669U, -3036986609U, -3036986599U, -3036986593U, -3036986569U, -3036986509U, -3036986507U, -3036986501U, -3036986479U, -3036986441U, -3036986431U, -3036986417U, -3036986411U, -3036986383U, -3036986333U, -3036986287U, -3036986279U, -3036986203U, -3036986189U, -3036986167U, -3036986129U, -3036986123U, -3036986107U, -3036986041U, -3036986023U, -3036986009U, -3036985999U, -3036985993U, -3036985979U, -3036985949U, -3036985921U, -3036985877U, -3036985873U, -3036985837U, -3036985829U, -3036985817U, -3036985813U, -3036985799U, -3036985771U, -3036985753U, -3036985747U, -3036985741U, -3036985739U, -3036985733U, -3036985729U, -3036985709U, -3036985697U, -3036985673U, -3036985643U, -3036985613U, -3036985607U, -3036985603U, -3036985583U, -3036985561U, -3036985559U, -3036985547U, -3036985543U, -3036985499U, -3036985459U, -3036985439U, -3036985433U, -3036985409U, -3036985373U, -3036985361U, -3036985309U, -3036985291U, -3036985283U, -3036985267U, -3036985253U, -3036985249U, -3036985219U, -3036985207U, -3036985187U, -3036985177U, -3036985151U, -3036985097U, -3036985093U, -3036985073U, -3036985033U, -3036985031U, -3036985001U, -3036984997U, -3036984989U, -3036984971U, -3036984953U, -3036984943U, -3036984917U, -3036984887U, -3036984803U, -3036984799U, -3036984787U, -3036984773U, -3036984761U, -3036984751U, -3036984749U, -3036984721U, -3036984697U, -3036984673U, -3036984667U, -3036984637U, -3036984623U, -3036984589U, -3036984569U, -3036984563U, -3036984539U, -3036984527U, -3036984481U, -3036984479U, -3036984427U, -3036984421U, -3036984413U, -3036984407U, -3036984403U, -3036984373U, -3036984367U, -3036984361U, -3036984343U, -3036984319U, -3036984287U, -3036984259U, -3036984257U, -3036984253U, -3036984199U, -3036984191U, -3036984151U, -3036984133U, -3036984131U, -3036984089U, -3036984059U, -3036984053U, -3036984047U, -3036984017U, -3036983933U, -3036983923U, -3036983909U, -3036983897U, -3036983867U, -3036983843U, -3036983837U, -3036983827U, -3036983813U, -3036983809U, -3036983777U, -3036983771U, -3036983699U, -3036983689U, -3036983671U, -3036983657U, -3036983629U, -3036983623U, -3036983597U, -3036983567U, -3036983561U, -3036983539U, -3036983533U, -3036983497U, -3036983483U, -3036983441U, -3036983407U, -3036983387U, -3036983297U, -3036983281U, -3036983249U, -3036983203U, -3036983189U, -3036983177U, -3036983167U, -3036983137U, -3036983111U, -3036983099U, -3036983083U, -3036983063U, -3036983057U, -3036983041U, -3036982981U, -3036982937U, -3036982919U, -3036982853U, -3036982843U, -3036982841U, -3036982789U, -3036982777U, -3036982757U, -3036982727U, -3036982693U, -3036982643U, -3036982639U, -3036982601U, -3036982589U, -3036982577U, -3036982567U, -3036982547U, -3036982541U, -3036982523U, -3036982519U, -3036982489U, -3036982469U, -3036982451U, -3036982423U, -3036982397U, -3036982387U, -3036982349U, -3036982337U, -3036982331U, -3036982313U, -3036982297U, -3036982279U, -3036982271U, -3036982189U, -3036982139U, -3036982133U, -3036982121U, -3036982111U, -3036982103U, -3036982099U, -3036982093U, -3036982061U, -3036982043U, -3036982009U, -3036982001U, -3036981979U, -3036981967U, -3036981953U, -3036981931U, -3036981923U, -3036981917U, -3036981863U, -3036981859U, -3036981853U, -3036981851U, -3036981821U, -3036981811U, -3036981797U, -3036981763U, -3036981733U, -3036981713U, -3036981691U, -3036981659U, -3036981553U, -3036981547U, -3036981539U, -3036981533U, -3036981481U, -3036981421U, -3036981407U, -3036981401U, -3036981383U, -3036981373U, -3036981359U, -3036981347U, -3036981323U, -3036981313U, -3036981307U, -3036981301U, -3036981289U, -3036981287U, -3036981209U, -3036981179U, -3036981139U, -3036981097U, -3036981067U, -3036981043U, -3036981041U, -3036981023U, -3036981011U, -3036980971U, -3036980941U, -3036980917U, -3036980911U, -3036980897U, -3036980867U, -3036980851U, -3036980819U, -3036980803U, -3036980761U, -3036980753U, -3036980747U, -3036980701U, -3036980699U, -3036980677U, -3036980599U, -3036980579U, -3036980549U, -3036980537U, -3036980533U, -3036980519U, -3036980497U, -3036980491U, -3036980459U, -3036980423U, -3036980371U, -3036980363U, -3036980339U, -3036980327U, -3036980269U, -3036980267U, -3036980263U, -3036980207U, -3036980161U, -3036980129U, -3036980123U, -3036980117U, -3036980077U, -3036980071U, -3036980047U, -3036980041U, -3036980039U, -3036980033U, -3036980027U, -3036979997U, -3036979987U, -3036979937U, -3036979927U, -3036979919U, -3036979873U, -3036979861U, -3036979849U, -3036979837U, -3036979793U, -3036979787U, -3036979769U, -3036979763U, -3036979723U, -3036979709U, -3036979679U, -3036979661U, -3036979601U, -3036979597U, -3036979579U, -3036979571U, -3036979531U, -3036979529U, -3036979523U, -3036979457U, -3036979391U, -3036979357U, -3036979343U, -3036979339U, -3036979303U, -3036979301U, -3036979291U, -3036979289U, -3036979261U, -3036979249U, -3036979237U, -3036979223U, -3036762997U, -3036545581U, -3036327389U, -3036107951U, -3035888633U, -3035669363U, -3035449477U, -3035232667U, -3035014193U, -3034795427U, -3034577531U, -3034357853U, -3034138969U, -3033923621U, -3033706409U, -3033488597U, -3033267889U, -3033049871U, -3032832493U, -3032615063U, -3032396527U, -3032177359U, -3031960339U, -3031742731U, -3031526081U, -3031308359U, -3031092199U, -3030873071U, -3030655757U, -3030437257U, -3030218647U, -3029999191U, -3029780833U, -3029559389U, -3029339741U, -3029122153U, -3028904231U, -3028687897U, -3028467803U, -3028251181U, -3028034189U, -3027815579U, -3027597247U, -3027377317U, -3027158237U, -3026939441U, -3026721421U, -3026502179U, -3026282261U, -3026065561U, -3025847507U, -3025627663U, -3025409689U, -3025190813U, -3024971231U, -3024753383U, -3024533179U, -3024312673U, -3024094123U, -3023876753U, -3023655737U, -3023439317U, -3023222239U, -3023004151U, -3022786831U, -3022566857U, -3022349243U, -3022131979U, -3021911663U, -3021695137U, -3021477377U, -3021256289U, -3021037769U, -3020820247U, -3020600897U, -3020381843U, -3020165179U, -3019948573U, -3019729819U, -3019510561U, -3019294087U, -3019074679U, -3018854257U, -3018637471U, -3018418159U, -3018199469U, -3017981123U, -3017762807U, -3017544701U, -3017327809U, -3017107381U, -3016890403U, -3016671503U, -3016453117U, -3016234721U, -3016015661U, -3015797003U, -3015579211U, -3015360779U, -3015141427U, -3014924197U, -3014705597U, -3014487473U, -3014268743U, -3014052511U, -3013832473U, -3013615529U, -3013397269U, -3013177819U, -3012960241U, -3012743291U, -3012525497U, -3012307019U, -3012088889U, -3011870993U, -3011652491U, -3011434169U, -3011217061U, -3010999219U, -3010780781U, -3010564993U, -3010348387U, -3010127833U, -3009910177U, -3009693839U, -3009474253U, -3009255637U, -3009037517U, -3008820911U, -3008599381U, -3008379739U, -3008159723U, -3007941473U, -3007724221U, -3007506361U, -3007288589U, -3007068709U, -3006850277U, -3006630499U, -3006412979U, -3006194489U, -3005975761U, -3005755367U, -3005537413U, -3005317433U, -3005101609U, -3004884821U, -3004669463U, -3004450633U, -3004231093U, -3004011743U, -3003795953U, -3003576871U, -3003357971U, -3003138847U, -3002919079U, -3002700947U, -3002481649U, -3002264299U, -3002046821U, -3001828987U, -3001609753U, -3001390789U, -3001172389U, -3000954289U, -3000736049U, -3000517057U, -3000299059U, -3000081691U, -2999865541U, -2999645267U, -2999428681U, -2999208437U, -2998989517U, -2998769261U, -2998552309U, -2998331761U, -2998112737U, -2997895037U, -2997675017U, -2997456079U, -2997236027U, -2997018683U, -2996799863U, -2996579689U, -2996360473U, -2996141653U, -2995922999U, -2995706647U, -2995488203U, -2995270471U, -2995052131U, -2994832817U, -2994613397U, -2994394969U, -2994176371U, -2993958943U, -2993739953U, -2993521463U, -2993302891U, -2993085449U, -2992867159U, -2992647499U, -2992428287U, -2992211983U, -2991996857U, -2991776339U, -2991556427U, -2991341417U, -2991121901U, -2990904949U, -2990686943U, -2990471509U, -2990252131U, -2990033617U, -2989816859U, -2989597759U, -2989377431U, -2989159883U, -2988940987U, -2988721301U, -2988502883U, -2988285617U, -2988066629U, -2987849437U, -2987630771U, -2987414873U, -2987198597U, -2986980923U, -2986764181U, -2986545649U, -2986327571U, -2986109209U, -2985890657U, -2985670433U, -2985453733U, -2985237617U, -2985019019U, -2984801321U, -2984581697U, -2984360947U, -2984142757U, -2983925299U, -2983708313U, -2983488721U, -2983270751U, -2983052749U, -2982833473U, -2982617243U, -2982401029U, -2982184763U, -2981967419U, -2981746181U, -2981525629U, -2981308009U, -2981089733U, -2980871129U, -2980654093U, -2980435439U, -2980218091U, -2980002373U, -2979781547U, -2979562793U, -2979344219U, -2979127687U, -2978907857U, -2978690389U, -2978472713U, -2978255261U, -2978038267U, -2977818317U, -2977601191U, -2977384337U, -2977166617U, -2976948059U, -2976730721U, -2976512857U, -2976292927U, -2976075541U, -2975857043U, -2975638751U, -2975421623U, -2975204087U, -2974987151U, -2974768619U, -2974552081U, -2974332671U, -2974113341U, -2973895261U, -2973677171U, -2973458113U, -2973241703U, -2973023369U, -2972804099U, -2972586329U, -2972367829U, -2972149039U, -2971931051U, -2971711019U, -2971494139U, -2971277423U, -2971059173U, -2970838919U, -2970619343U, -2970403757U, -2970183743U, -2969959627U, -2969743547U, -2969525033U, -2969309891U, -2969090279U, -2968871251U, -2968651541U, -2968435117U, -2968214531U, -2967996443U, -2967780931U, -2967562369U, -2967343021U, -2967124487U, -2966906353U, -2966688983U, -2966472557U, -2966253179U, -2966035691U, -2965819673U, -2965600733U, -2965383739U, -2965166959U, -2964946847U, -2964729197U, -2964510889U, -2964292297U, -2964075437U, -2963855227U, -2963638693U, -2963421677U, -2963204119U, -2962986503U, -2962766491U, -2962547311U, -2962331657U, -2962112771U, -2961895337U, -2961679121U, -2961460591U, -2961241603U, -2961022781U, -2960805161U, -2960587099U, -2960369359U, -2960151149U, -2959931383U, -2959714627U, -2959495937U, -2959277393U, -2959059997U, -2958843161U, -2958625499U, -2958407399U, -2958189191U, -2957972767U, -2957753053U, -2957535137U, -2957317171U, -2957098873U, -2956880557U, -2956660747U, -2956441343U, -2956224577U, -2956007273U, -2955789979U, -2955569107U, -2955349213U, -2955131051U, -2954912297U, -2954693083U, -2954475233U, -2954255153U, -2954037211U, -2953818851U, -2953599667U, -2953381993U, -2953162151U, -2952942739U, -2952725873U, -2952506693U, -2952289517U, -2952071821U, -2951854319U, -2951636731U, -2951419189U, -2951201251U, -2950982971U, -2950763201U, -2950544221U, -2950326689U, -2950110017U, -2949891643U, -2949673561U, -2949456077U, -2949238151U, -2949022819U, -2948803327U, -2948584297U, -2948367439U, -2948148473U, -2947930483U, -2947712767U, -2947495459U, -2947277803U, -2947061057U, -2946842537U, -2946625949U, -2946405619U, -2946187753U, -2945970421U, -2945751373U, -2945535001U, -2945315713U, -2945096753U, -2944880387U, -2944658933U, -2944441141U, -2944223479U, -2944005997U, -2943788681U, -2943569197U, -2943351529U, -2943132887U, -2942914609U, -2942697049U, -2942480587U, -2942261857U, -2942041747U, -2941824229U, -2941604959U, -2941387153U, -2941168301U, -2940949691U, -2940733787U, -2940516781U, -2940299849U, -2940084479U, -2939867743U, -2939650613U, -2939432609U, -2939214277U, -2938996777U, -2938779271U, -2938560353U, -2938341551U, -2938124249U, -2937905819U, -2937690901U, -2937472607U, -2937253091U, -2937035341U, -2936814169U, -2936597249U, -2936378723U, -2936162003U, -2935942103U, -2935724443U, -2935504679U, -2935286489U, -2935067897U, -2934850591U, -2934633607U, -2934416071U, -2934197197U, -2933980571U, -2933761433U, -2933543771U, -2933324839U, -2933105831U, -2932886129U, -2932668953U, -2932451867U, -2932234901U, -2932015831U, -2931799373U, -2931579601U, -2931363089U, -2931144523U, -2930928227U, -2930711587U, -2930493919U, -2930273009U, -2930054573U, -2929836719U, -2929619653U, -2929400603U, -2929183613U, -2928966151U, -2928748139U, -2928530929U, -2928313153U, -2928094357U, -2927875619U, -2927658673U, -2927442487U, -2927222069U, -2927004709U, -2926787309U, -2926569361U, -2926350367U, -2926135529U, -2925917893U, -2925698173U, -2925480919U, -2925263279U, -2925046463U, -2924831069U, -2924613371U, -2924393729U, -2924175193U, -2923954801U, -2923737343U, -2923518683U, -2923300829U, -2923082209U, -2922864767U, -2922649421U, -2922430073U, -2922212519U, -2921994917U, -2921775803U, -2921559653U, -2921341103U, -2921126489U, -2920908283U, -2920689061U, -2920471049U, -2920251703U, -2920034347U, -2919817627U, -2919598021U, -2919381319U, -2919162959U, -2918943683U, -2918729057U, -2918510587U, -2918292271U, -2918072057U, -2917854413U, -2917635811U, -2917419499U, -2917202663U, -2916983521U, -2916765193U, -2916545773U, -2916328517U, -2916112183U, -2915893681U, -2915677241U, -2915456513U, -2915239601U, -2915020937U, -2914803761U, -2914586503U, -2914368059U, -2914150271U, -2913932779U, -2913714131U, -2913494791U, -2913274457U, -2913057307U, -2912839169U, -2912621401U, -2912404247U, -2912187853U, -2911970317U, -2911752157U, -2911532539U, -2911313501U, -2911094951U, -2910876457U, -2910657353U, -2910439451U, -2910221297U, -2910003703U, -2909787409U, -2909568721U, -2909351741U, -2909134769U, -2908916249U, -2908699601U, -2908480777U, -2908262023U, -2908043023U, -2907825317U, -2907607337U, -2907388073U, -2907166967U, -2906952473U, -2906736593U, -2906518943U, -2906300231U, -2906082233U, -2905864067U, -2905644013U, -2905426619U, -2905208881U, -2904993263U, -2904773771U, -2904556769U, -2904338867U, -2904123031U, -2903903861U, -2903686447U, -2903468497U, -2903250821U, -2903031559U, -2902812839U, -2902597123U, -2902380449U, -2902160717U, -2901941417U, -2901724187U, -2901507019U, -2901289403U, -2901071813U, -2900854379U, -2900634593U, -2900418889U, -2900202287U, -2899984603U, -2899766291U, -2899550011U, -2899332323U, -2899114357U, -2898895687U, -2898677891U, -2898458359U, -2898238669U, -2898022789U, -2897804407U, -2897587421U, -2897369021U, -2897150423U, -2896932589U, -2896714631U, -2896495643U, -2896278251U, -2896061459U, -2895842179U, -2895625609U, -2895408143U, -2895191393U, -2894976157U, -2894758709U, -2894538461U, -2894320211U, -2894101087U, -2893885381U, -2893666007U, -2893448681U, -2893230569U, -2893012403U, -2892794153U, -2892573601U, -2892357361U, -2892141401U, -2891924291U, -2891705197U, -2891485453U, -2891265869U, -2891046343U, -2890827241U, -2890611539U, -2890395037U, -2890176347U, -2889959197U, -2889741301U, -2889523193U, -2889304499U, -2889089393U, -2888872171U, -2888652913U, -2888435443U, -2888217103U, -2887998313U, -2887779967U, -2887561093U, -2887343237U, -2887123997U, -2886907081U, -2886689119U, -2886472033U, -2886253057U, -2886035473U, -2885816789U, -2885599417U, -2885384233U, -2885167091U, -2884947421U, -2884728403U, -2884511183U, -2884293637U, -2884076357U, -2883857357U, -2883636991U, -2883420959U, -2883205421U, -2882988211U, -2882768663U, -2882551601U, -2882332891U, -2882115923U, -2881893467U, -2881675499U, -2881460221U, -2881243067U, -2881026271U, -2880811447U, -2880592861U, -2880372919U, -2880155819U, -2879937503U, -2879719223U, -2879501707U, -2879284477U, -2879065151U, -2878847353U, -2878630171U, -2878412213U, -2878195469U, -2877978211U, -2877761027U, -2877542959U, -2877323003U, -2877103631U, -2876887777U, -2876669153U, -2876450789U, -2876234329U, -2876015969U, -2875798063U, -2875580219U, -2875359587U, -2875143757U, -2874924197U, -2874705727U, -2874488887U, -2874269987U, -2874053293U, -2873838833U, -2873621573U, -2873405077U, -2873184967U, -2872965317U, -2872747699U, -2872530079U, -2872311397U, -2872093027U, -2871876197U, -2871660371U, -2871442997U, -2871223709U, -2871006713U, -2870788931U, -2870569511U, -2870353319U, -2870136403U, -2869918537U, -2869699211U, -2869482403U, -2869264327U, -2869046833U, -2868829897U, -2868611561U, -2868394531U, -2868174143U, -2867957447U, -2867741813U, -2867525273U, -2867306537U, -2867087807U, -2866870037U, -2866650131U, -2866432507U, -2866214723U, -2865995389U, -2865779281U, -2865562759U, -2865345643U, -2865128281U, -2864909689U, -2864694359U, -2864474981U, -2864259109U, -2864041781U, -2863821967U, -2863603163U, -2863384697U, -2863168019U, -2862948337U, -2862729659U, -2862513271U, -2862296011U, -2862079601U, -2861861329U, -2861642369U, -2861425097U, -2861209789U, -2860995217U, -2860778423U, -2860561097U, -2860342603U, -2860123993U, -2859905843U, -2859688873U, -2859471767U, -2859252779U, -2859032731U, -2858814547U, -2858597117U, -2858380367U, -2858163197U, -2857943411U, -2857725271U, -2857506689U, -2857290773U, -2857072787U, -2856856927U, -2856636661U, -2856421241U, -2856205237U, -2855990087U, -2855772947U, -2855553373U, -2855333407U, -2855115623U, -2854898329U, -2854680739U, -2854464091U, -2854245203U, -2854025267U, -2853810433U, -2853595379U, -2853379457U, -2853160217U, -2852940071U, -2852723551U, -2852506303U, -2852289907U, -2852072389U, -2851854713U, -2851637123U, -2851420771U, -2851204067U, -2850984959U, -2850768589U, -2850549269U, -2850330421U, -2850111983U, -2849894777U, -2849677687U, -2849461753U, -2849245277U, -2849027833U, -2848809701U, -2848590973U, -2848374059U, -2848154471U, -2847936691U, -2847718589U, -2847501413U, -2847283139U, -2847064399U, -2846845681U, -2846630233U, -2846412451U, -2846195621U, -2845978997U, -2845761719U, -2845545929U, -2845328281U, -2845111153U, -2844894137U, -2844676819U, -2844457703U, -2844237833U, -2844020057U, -2843802061U, -2843583269U, -2843367311U, -2843148307U, -2842929931U, -2842712767U, -2842494803U, -2842276837U, -2842059893U, -2841843317U, -2841625249U, -2841405043U, -2841186893U, -2840966993U, -2840751341U, -2840533337U, -2840315887U, -2840099881U, -2839879993U, -2839663579U, -2839446527U, -2839227731U, -2839010423U, -2838792029U, -2838573323U, -2838357359U, -2838139411U, -2837920433U, -2837703611U, -2837486299U, -2837267611U, -2837049623U, -2836833059U, -2836613807U, -2836398179U, -2836180517U, -2835963887U, -2835744931U, -2835526247U, -2835309481U, -2835089911U, -2834871859U, -2834655797U, -2834437279U, -2834220317U, -2834003617U, -2833786201U, -2833565099U, -2833349143U, -2833132711U, -2832915803U, -2832695309U, -2832478303U, -2832259931U, -2832041741U, -2831822611U, -2831604649U, -2831385941U, -2831168953U, -2830949377U, -2830732193U, -2830514789U, -2830296191U, -2830078421U, -2829861907U, -2829645557U, -2829428501U, -2829210367U, -2828994253U, -2828776007U, -2828556517U, -2828338973U, -2828122361U, -2827905911U, -2827687451U, -2827470001U, -2827253929U, -2827036441U, -2826817351U, -2826600781U, -2826383321U, -2826165103U, -2825945599U, -2825728769U, -2825510437U, -2825292881U, -2825075599U, -2824857577U, -2824637267U, -2824421753U, -2824203383U, -2823985121U, -2823767741U, -2823552713U, -2823334027U, -2823115531U, -2822899567U, -2822681171U, -2822466149U, -2822249779U, -2822031559U, -2821815097U, -2821597187U, -2821377467U, -2821161307U, -2820944677U, -2820726023U, -2820509233U, -2820291787U, -2820074617U, -2819858617U, -2819639863U, -2819420909U, -2819204699U, -2818986097U, -2818769671U, -2818554127U, -2818338797U, -2818119323U, -2817902393U, -2817687143U, -2817470609U, -2817251677U, -2817033533U, -2816816729U, -2816597177U, -2816379701U, -2816161721U, -2815943177U, -2815724267U, -2815508719U, -2815292171U, -2815074161U, -2814855517U, -2814639523U, -2814424241U, -2814205813U, -2813989523U, -2813771789U, -2813553863U, -2813335013U, -2813118311U, -2812899511U, -2812682017U, -2812466269U, -2812247873U, -2812029713U, -2811814463U, -2811594971U, -2811377483U, -2811158557U, -2810940163U, -2810724047U, -2810504129U, -2810285299U, -2810067109U, -2809850917U, -2809632401U, -2809416563U, -2809198597U, -2808980641U, -2808761933U, -2808546109U, -2808327799U, -2808109763U, -2807892041U, -2807673161U, -2807455799U, -2807239129U, -2807021237U, -2806801457U, -2806581781U, -2806364989U, -2806148617U, -2805931031U, -2805715879U, -2805500573U, -2805283331U, -2805064187U, -2804847361U, -2804630473U, -2804413741U, -2804195767U, -2803975861U, -2803759481U, -2803540147U, -2803324603U, -2803107253U, -2802890353U, -2802672823U, -2802457183U, -2802239873U, -2802023131U, -2801805257U, -2801588953U, -2801372323U, -2801154773U, -2800937873U, -2800719839U, -2800502303U, -2800284107U, -2800066679U, -2799847909U, -2799629947U, -2799413213U, -2799194747U, -2798976953U, -2798757359U, -2798541121U, -2798323391U, -2798104747U, -2797889089U, -2797671869U, -2797455259U, -2797239293U, -2797022453U, -2796803531U, -2796585007U, -2796367729U, -2796151247U, -2795933939U, -2795714539U, -2795497283U, -2795280629U, -2795064541U, -2794846657U, -2794628513U, -2794411001U, -2794193641U, -2793974507U, -2793756883U, -2793538697U, -2793322783U, -2793104891U, -2792887567U, -2792669413U, -2792450077U, -2792234747U, -2792015983U, -2791799281U, -2791579949U, -2791362671U, -2791148117U, -2790929363U, -2790712147U, -2790494117U, -2790276341U, -2790057701U, -2789840201U, -2789622509U, -2789404531U, -2789187923U, -2788970959U, -2788753739U, -2788535047U, -2788317643U, -2788099129U, -2787883151U, -2787666533U, -2787448931U, -2787231721U, -2787014497U, -2786796839U, -2786578331U, -2786361649U, -2786144821U, -2785926443U, -2785709483U, -2785492691U, -2785276147U, -2785059701U, -2784842513U, -2784623269U, -2784403757U, -2784186253U, -2783970367U, -2783751689U, -2783533561U, -2783316001U, -2783098823U, -2782882673U, -2782664111U, -2782447223U, -2782229669U, -2782011607U, -2781792473U, -2781577033U, -2781359699U, -2781143957U, -2780925857U, -2780705443U, -2780487971U, -2780272037U, -2780052623U, -2779835621U, -2779620559U, -2779402261U, -2779184761U, -2778966361U, -2778750509U, -2778533341U, -2778314027U, -2778097499U, -2777877251U, -2777660539U, -2777443531U, -2777226589U, -2777009243U, -2776792973U, -2776576351U, -2776361117U, -2776143047U, -2775924847U, -2775707611U, -2775489313U, -2775272177U, -2775054169U, -2774836811U, -2774619791U, -2774401967U, -2774184313U, -2773966513U, -2773747181U, -2773530527U, -2773313149U, -2773095791U, -2772879017U, -2772660467U, -2772444667U, -2772228551U, -2772009767U, -2771792449U, -2771576581U, -2771359039U, -2771144221U, -2770927889U, -2770711787U, -2770494997U, -2770277231U, -2770058563U, -2769839873U, -2769624397U, -2769407651U, -2769188251U, -2768970991U, -2768754187U, -2768536579U, -2768319319U, -2768102431U, -2767887809U, -2767669573U, -2767451647U, -2767235123U, -2767018187U, -2766800807U, -2766583471U, -2766366329U, -2766148349U, -2765931257U, -2765713711U, -2765494453U, -2765279519U, -2765058767U, -2764841509U, -2764622239U, -2764406269U, -2764188703U, -2763970529U, -2763752401U, -2763533807U, -2763317149U, -2763100811U, -2762884231U, -2762668303U, -2762450149U, -2762230519U, -2762015407U, -2761798139U, -2761581419U, -2761365491U, -2761146097U, -2760927271U, -2760711053U, -2760493937U, -2760274871U, -2760056279U, -2759839081U, -2759621659U, -2759403499U, -2759183873U, -2758967117U, -2758749431U, -2758531091U, -2758312511U, -2758094869U, -2757875647U, -2757661289U, -2757443287U, -2757225577U, -2757009529U, -2756793001U, -2756576659U, -2756357939U, -2756141051U, -2755926427U, -2755708801U, -2755491989U, -2755275233U, -2755057649U, -2754840499U, -2754623321U, -2754407107U, -2754190189U, -2753970071U, -2753751277U, -2753533889U, -2753317397U, -2753098739U, -2752879889U, -2752663559U, -2752447129U, -2752230763U, -2752012477U, -2751795523U, -2751574817U, -2751359173U, -2751143231U, -2750927563U, -2750710201U, -2750494993U, -2750277767U, -2750058631U, -2749838719U, -2749621681U, -2749404323U, -2749186409U, -2748969491U, -2748754933U, -2748537481U, -2748318541U, -2748099931U, -2747881769U, -2747664079U, -2747446327U, -2747228923U, -2747009921U, -2746791577U, -2746574401U, -2746356461U, -2746139393U, -2745923597U, -2745705107U, -2745486259U, -2745268853U, -2745053603U, -2744837633U, -2744620103U, -2744402081U, -2744184061U, -2743965649U, -2743747399U, -2743529093U, -2743309747U, -2743091501U, -2742875263U, -2742657499U, -2742436849U, -2742221177U, -2742002209U, -2741784317U, -2741565467U, -2741350751U, -2741134939U, -2740917589U, -2740700147U, -2740484129U, -2740268543U, -2740051661U, -2739832097U, -2739613999U, -2739397519U, -2739180611U, -2738965601U, -2738750713U, -2738530519U, -2738312657U, -2738097601U, -2737880659U, -2737663919U, -2737447673U, -2737231039U, -2737011469U, -2736795203U, -2736577367U, -2736359929U, -2736140411U, -2735922361U, -2735707621U, -2735490701U, -2735272087U, -2735051993U, -2734834733U, -2734617673U, -2734399807U, -2734183789U, -2733964489U, -2733747299U, -2733531319U, -2733315773U, -2733096937U, -2732877229U, -2732659313U, -2732442539U, -2732224381U, -2732008493U, -2731791107U, -2731575277U, -2731359073U, -2731143791U, -2730927193U, -2730710711U, -2730492463U, -2730272821U, -2730056191U, -2729836853U, -2729618401U, -2729401309U, -2729183783U, -2728967399U, -2728750513U, -2728532957U, -2728316387U, -2728095649U, -2727876353U, -2727657487U, -2727441889U, -2727223129U, -2727005321U, -2726785889U, -2726567969U, -2726350567U, -2726134057U, -2725917767U, -2725702043U, -2725483997U, -2725265143U, -2725048691U, -2724834121U, -2724617173U, -2724400213U, -2724182843U, -2723963009U, -2723744983U, -2723527771U, -2723309219U, -2723091817U, -2722872419U, -2722654423U, -2722437283U, -2722221071U, -2722003787U, -2721787063U, -2721571087U, -2721354179U, -2721135533U, -2720918813U, -2720700211U, -2720482043U, -2720263867U, -2720045333U, -2719829513U, -2719610849U, -2719394527U, -2719178291U, -2718963449U, -2718746123U, -2718526709U, -2718310267U, -2718091331U, -2717873803U, -2717658043U, -2717440529U, -2717224541U, -2717007047U, -2716791377U, -2716572949U, -2716355051U, -2716137659U, -2715920573U, -2715704273U, -2715486167U, -2715267853U, -2715051109U, -2714833687U, -2714615261U, -2714398829U, -2714182301U, -2713964917U, -2713748071U, -2713530331U, -2713313419U, -2713095769U, -2712878431U, -2712662101U, -2712443231U, -2712227411U, -2712009089U, -2711793187U, -2711574529U, -2711360329U, -2711144291U, -2710924687U, -2710707551U, -2710489841U, -2710273571U, -2710057997U, -2709838841U, -2709622463U, -2709405917U, -2709186349U, -2708968877U, -2708750413U, -2708532971U, -2708318071U, -2708101423U, -2707882889U, -2707665913U, -2707449389U, -2707232833U, -2707015789U, -2706799423U, -2706580579U, -2706364931U, -2706147757U, -2705930971U, -2705712257U, -2705495677U, -2705279699U, -2705062303U, -2704846349U, -2704628477U, -2704412203U, -2704194443U, -2703975119U, -2703756427U, -2703538801U, -2703322967U, -2703105413U, -2702888407U, -2702670497U, -2702454919U, -2702235997U, -2702021737U, -2701801493U, -2701585729U, -2701367989U, -2701151581U, -2700934559U, -2700718619U, -2700500519U, -2700284057U, -2700067691U, -2699850661U, -2699632207U, -2699414203U, -2699197199U, -2698979867U, -2698763449U, -2698546423U, -2698328177U, -2698112723U, -2697894349U, -2697677911U, -2697461189U, -2697244709U, -2697028651U, -2696813281U, -2696594269U, -2696377417U, -2696159857U, -2695942259U, -2695726037U, -2695509877U, -2695293703U, -2695077029U, -2694857899U, -2694641657U, -2694426953U, -2694209863U, -2693992429U, -2693776999U, -2693558843U, -2693339317U, -2693121281U, -2692904281U, -2692687223U, -2692468787U, -2692252309U, -2692034089U, -2691819241U, -2691602107U, -2691383239U, -2691166903U, -2690948789U, -2690732003U, -2690515171U, -2690299373U, -2690081593U, -2689862561U, -2689645753U, -2689428227U, -2689209829U, -2688993607U, -2688777209U, -2688561017U, -2688343547U, -2688127933U, -2687911913U, -2687694539U, -2687476763U, -2687263067U, -2687049571U, -2686832471U, -2686615571U, -2686398347U, -2686179949U, -2685965081U, -2685747137U, -2685529541U, -2685310961U, -2685093211U, -2684876093U, -2684658019U, -2684440067U, -2684223953U, -2684005817U, -2683789963U, -2683571243U, -2683353733U, -2683137199U, -2682917623U, -2682700063U, -2682479377U, -2682264451U, -2682047707U, -2681828923U, -2681611753U, -2681394413U, -2681177111U, -2680959709U, -2680744291U, -2680525957U, -2680308977U, -2680096213U, -2679877279U, -2679660703U, -2679442013U, -2679225181U, -2679008639U, -2678791777U, -2678576051U, -2678358019U, -2678142487U, -2677926301U, -2677708807U, -2677493873U, -2677275257U, -2677055411U, -2676838837U, -2676620759U, -2676405769U, -2676189599U, -2675970641U, -2675755597U, -2675538689U, -2675323379U, -2675104633U, -2674886273U, -2674669183U, -2674452647U, -2674236199U, -2674019521U, -2673802099U, -2673589109U, -2673370517U, -2673153583U, -2672936393U, -2672719319U, -2672502383U, -2672285699U, -2672069171U, -2671851187U, -2671632563U, -2671414829U, -2671199281U, -2670982297U, -2670764023U, -2670547589U, -2670329219U, -2670112937U, -2669897969U, -2669681671U, -2669463829U, -2669247731U, -2669028689U, -2668810241U, -2668592911U, -2668377587U, -2668161701U, -2667945023U, -2667728057U, -2667510931U, -2667293077U, -2667076751U, -2666860253U, -2666643367U, -2666425523U, -2666207899U, -2665990751U, -2665773419U, -2665557353U, -2665337501U, -2665121737U, -2664904817U, -2664690073U, -2664472079U, -2664258323U, -2664039709U, -2663820461U, -2663602421U, -2663387431U, -2663168177U, -2662951507U, -2662735541U, -2662516147U, -2662300259U, -2662082509U, -2661865067U, -2661648779U, -2661432827U, -2661214163U, -2660999801U, -2660781689U, -2660562241U, -2660345951U, -2660127443U, -2659910443U, -2659691731U, -2659474313U, -2659255663U, -2659039301U, -2658822889U, -2658607327U, -2658391117U, -2658171743U, -2657953993U, -2657735627U, -2657519093U, -2657300533U, -2657084537U, -2656869827U, -2656653679U, -2656434799U, -2656218541U, -2656001609U, -2655785789U, -2655570427U, -2655354607U, -2655138589U, -2654923177U, -2654706149U, -2654489879U, -2654274641U, -2654055773U, -2653839263U, -2653621843U, -2653405831U, -2653189291U, -2652972197U, -2652754297U, -2652539249U, -2652321443U, -2652103859U, -2651884883U, -2651667787U, -2651451791U, -2651231629U, -2651014127U, -2650796653U, -2650580249U, -2650363361U, -2650147111U, -2649933037U, -2649715879U, -2649498611U, -2649282833U, -2649064001U, -2648847847U, -2648628863U, -2648409479U, -2648192941U, -2647976189U, -2647759267U, -2647543273U, -2647326169U, -2647110629U, -2646891629U, -2646675377U, -2646458467U, -2646241303U, -2646024781U, -2645808241U, -2645591363U, -2645373799U, -2645155729U, -2644938983U, -2644720241U, -2644505509U, -2644285547U, -2644068403U, -2643849823U, -2643632899U, -2643416371U, -2643198983U, -2642982389U, -2642764637U, -2642546867U, -2642330021U, -2642114309U, -2641897289U, -2641679903U, -2641464583U, -2641247107U, -2641030501U, -2640813577U, -2640595387U, -2640378677U, -2640158657U, -2639944249U, -2639727721U, -2639511683U, -2639296301U, -2639077267U, -2638858801U, -2638637987U, -2638423691U, -2638207669U, -2637992069U, -2637776507U, -2637558317U, -2637341431U, -2637125737U, -2636909777U, -2636691353U, -2636473793U, -2636255731U, -2636038121U, -2635820051U, -2635603241U, -2635384553U, -2635166099U, -2634948179U, -2634729767U, -2634513631U, -2634295421U, -2634078131U, -2633861851U, -2633645137U, -2633429243U, -2633212481U, -2632993633U, -2632775279U, -2632558007U, -2632341337U, -2632126339U, -2631908537U, -2631692597U, -2631477319U, -2631259781U, -2631043561U, -2630828731U, -2630613143U, -2630397893U, -2630179499U, -2629962739U, -2629744907U, -2629529321U, -2629310449U, -2629091953U, -2628874163U, -2628659393U, -2628440917U, -2628222629U, -2628006571U, -2627789387U, -2627571263U, -2627356183U, -2627139131U, -2626923749U, -2626706723U, -2626490747U, -2626273151U, -2626054199U, -2625836069U, -2625621469U, -2625405073U, -2625186331U, -2624968571U, -2624753177U, -2624536573U, -2624318867U, -2624102137U, -2623886479U, -2623670167U, -2623450667U, -2623233539U, -2623015669U, -2622798911U, -2622582203U, -2622365293U, -2622146899U, -2621929019U, -2621714273U, -2621497343U, -2621280383U, -2621064059U, -2620847813U, -2620631471U, -2620414429U, -2620198877U, -2619982487U, -2619765787U, -2619550579U, -2619333139U, -2619116081U, -2618899931U, -2618682371U, -2618463889U, -2618248037U, -2618032909U, -2617816303U, -2617598407U, -2617381099U, -2617163711U, -2616947087U, -2616730153U, -2616515873U, -2616296401U, -2616081211U, -2615863463U, -2615646091U, -2615429951U, -2615214491U, -2614996649U, -2614780747U, -2614561129U, -2614343869U, -2614125539U, -2613909959U, -2613692597U, -2613477539U, -2613260467U, -2613044363U, -2612829473U, -2612611453U, -2612394649U, -2612176891U, -2611957609U, -2611740809U, -2611525001U, -2611307623U, -2611092301U, -2610874723U, -2610658429U, -2610440659U, -2610225349U, -2610009869U, -2609793761U, -2609575523U, -2609357537U, -2609140153U, -2608923287U, -2608707473U, -2608489789U, -2608273363U, -2608055477U, -2607838963U, -2607621487U, -2607403291U, -2607186877U, -2606966951U, -2606751743U, -2606533609U, -2606317411U, -2606100793U, -2605883897U, -2605667153U, -2605448753U, -2605231193U, -2605014913U, -2604797309U, -2604582131U, -2604366593U, -2604149179U, -2603934233U, -2603717729U, -2603502661U, -2603284571U, -2603067263U, -2602846133U, -2602629787U, -2602412567U, -2602195759U, -2601979477U, -2601761791U, -2601547447U, -2601328687U, -2601107869U, -2600891873U, -2600673967U, -2600457787U, -2600242111U, -2600025353U, -2599807471U, -2599589617U, -2599374607U, -2599156873U, -2598942991U, -2598725593U, -2598507889U, -2598293911U, -2598075091U, -2597857697U, -2597643011U, -2597426287U, -2597207407U, -2596990943U, -2596775537U, -2596557989U, -2596340353U, -2596123469U, -2595906763U, -2595690697U, -2595473267U, -2595256019U, -2595041297U, -2594823029U, -2594608529U, -2594391979U, -2594174971U, -2593957823U, -2593739803U, -2593521767U, -2593305053U, -2593087513U, -2592871531U, -2592654041U, -2592437929U, -2592221161U, -2592003863U, -2591787493U, -2591571179U, -2591355859U, -2591139919U, -2590921727U, -2590705829U, -2590488157U, -2590272709U, -2590057949U, -2589843371U, -2589624967U, -2589408167U, -2589194147U, -2588976583U, -2588759923U, -2588542763U, -2588325721U, -2588107619U, -2587892101U, -2587675567U, -2587460251U, -2587244389U, -2587025141U, -2586807149U, -2586590401U, -2586374317U, -2586158693U, -2585941643U, -2585722697U, -2585505907U, -2585290069U, -2585072767U, -2584855279U, -2584640579U, -2584422497U, -2584204607U, -2583990001U, -2583773659U, -2583555721U, -2583338327U, -2583121259U, -2582905651U, -2582688041U, -2582469793U, -2582254019U, -2582037103U, -2581820699U, -2581606201U, -2581389763U, -2581174697U, -2580956501U, -2580739171U, -2580522377U, -2580305843U, -2580090167U, -2579872481U, -2579656291U, -2579442023U, -2579223007U, -2579006891U, -2578788097U, -2578569919U, -2578353559U, -2578136993U, -2577920299U, -2577706259U, -2577488027U, -2577272167U, -2577055669U, -2576837143U, -2576619973U, -2576404241U, -2576188333U, -2575971793U, -2575754497U, -2575538299U, -2575321747U, -2575105031U, -2574888223U, -2574672091U, -2574456811U, -2574239957U, -2574024287U, -2573808011U, -2573590927U, -2573375023U, -2573157761U, -2572940339U, -2572723019U, -2572506899U, -2572292279U, -2572077103U, -2571858599U, -2571642473U, -2571425821U, -2571208529U, -2570990369U, -2570773441U, -2570559869U, -2570342717U, -2570124047U, -2569905977U, -2569691791U, -2569474489U, -2569259047U, -2569043497U, -2568826747U, -2568610543U, -2568394487U, -2568177319U, -2567960729U, -2567743853U, -2567527723U, -2567312149U, -2567094511U, -2566876579U, -2566660301U, -2566443881U, -2566226821U, -2566010947U, -2565794353U, -2565579977U, -2565364231U, -2565146569U, -2564930507U, -2564713583U, -2564498843U, -2564283143U, -2564066677U, -2563849087U, -2563634039U, -2563419293U, -2563201339U, -2562985517U, -2562768883U, -2562550747U, -2562331649U, -2562114743U, -2561899009U, -2561684717U, -2561469901U, -2561252557U, -2561036551U, -2560819993U, -2560600963U, -2560383131U, -2560163939U, -2559947333U, -2559732017U, -2559515687U, -2559298571U, -2559083963U, -2558866837U, -2558650291U, -2558433401U, -2558218781U, -2558002897U, -2557785821U, -2557567981U, -2557350097U, -2557134737U, -2556919997U, -2556701327U, -2556484211U, -2556267677U, -2556051929U, -2555837747U, -2555622319U, -2555406457U, -2555188639U, -2554971443U, -2554754921U, -2554539539U, -2554320997U, -2554104451U, -2553889699U, -2553674129U, -2553456461U, -2553239069U, -2553022207U, -2552804363U, -2552586833U, -2552373497U, -2552154617U, -2551939211U, -2551722221U, -2551507171U, -2551289401U, -2551072441U, -2550854513U, -2550637459U, -2550422011U, -2550204619U, -2549989213U, -2549772451U, -2549556367U, -2549344409U, -2549126737U, -2548911913U, -2548696739U, -2548480237U, -2548263559U, -2548045919U, -2547829759U, -2547611191U, -2547396581U, -2547179527U, -2546962577U, -2546746981U, -2546529199U, -2546312413U, -2546095631U, -2545880399U, -2545664809U, -2545449493U, -2545232681U, -2545014881U, -2544797323U, -2544580949U, -2544362081U, -2544144749U, -2543927899U, -2543710349U, -2543493541U, -2543278021U, -2543058757U, -2542841729U, -2542624603U, -2542408513U, -2542191709U, -2541975707U, -2541759137U, -2541542141U, -2541326009U, -2541111257U, -2540896591U, -2540679419U, -2540462593U, -2540246953U, -2540030399U, -2539813907U, -2539596281U, -2539379419U, -2539161697U, -2538945569U, -2538728831U, -2538513301U, -2538297287U, -2538080243U, -2537864347U, -2537649151U, -2537433263U, -2537217229U, -2537001541U, -2536784311U, -2536567823U, -2536351751U, -2536135703U, -2535920071U, -2535703109U, -2535485651U, -2535267913U, -2535049381U, -2534835071U, -2534618899U, -2534401141U, -2534184743U, -2533968511U, -2533751977U, -2533535057U, -2533319801U, -2533103939U, -2532889717U, -2532672287U, -2532458581U, -2532240527U, -2532024263U, -2531808221U, -2531594033U, -2531375533U, -2531159747U, -2530945583U, -2530728091U, -2530510111U, -2530291601U, -2530076701U, -2529860363U, -2529644539U, -2529427169U, -2529210923U, -2528994893U, -2528778227U, -2528561443U, -2528344967U, -2528129983U, -2527914227U, -2527697857U, -2527483549U, -2527265941U, -2527048369U, -2526831781U, -2526617609U, -2526401041U, -2526186511U, -2525969521U, -2525751269U, -2525536837U, -2525319001U, -2525102543U, -2524883839U, -2524667221U, -2524449793U, -2524233617U, -2524016647U, -2523800459U, -2523584641U, -2523368747U, -2523151927U, -2522932883U, -2522717297U, -2522499653U, -2522283347U, -2522067281U, -2521852183U, -2521635689U, -2521420529U, -2521202821U, -2520984749U, -2520769301U, -2520551983U, -2520337163U, -2520121147U, -2519904151U, -2519687407U, -2519469941U, -2519254519U, -2519038309U, -2518820833U, -2518604357U, -2518386329U, -2518171613U, -2517954631U, -2517740233U, -2517524573U, -2517306587U, -2517091133U, -2516875549U, -2516659099U, -2516440349U, -2516223511U, -2516009189U, -2515791953U, -2515574741U, -2515356967U, -2515140851U, -2514925321U, -2514708857U, -2514492941U, -2514278527U, -2514060737U, -2513844511U, -2513629211U, -2513413999U, -2513197331U, -2512982491U, -2512767919U, -2512550039U, -2512333891U, -2512118659U, -2511902051U, -2511683351U, -2511466921U, -2511249691U, -2511035069U, -2510818363U, -2510602331U, -2510385959U, -2510168447U, -2509952597U, -2509736107U, -2509518721U, -2509301233U, -2509086889U, -2508870779U, -2508654017U, -2508436187U, -2508220999U, -2508004423U, -2507788471U, -2507572759U, -2507358193U, -2507142773U, -2506926857U, -2506708901U, -2506492003U, -2506275773U, -2506059841U, -2505843227U, -2505628639U, -2505412999U, -2505197309U, -2504978291U, -2504764349U, -2504546719U, -2504331703U, -2504116333U, -2503900211U, -2503686869U, -2503468057U, -2503251931U, -2503034987U, -2502819383U, -2502601529U, -2502383761U, -2502165307U, -2501950663U, -2501732017U, -2501516429U, -2501298523U, -2501082677U, -2500865963U, -2500651249U, -2500433521U, -2500215791U, -2499999013U, -2499784513U, -2499566551U, -2499348193U, -2499133477U, -2498919091U, -2498700949U, -2498484803U, -2498268767U, -2498051131U, -2497835203U, -2497619143U, -2497401107U, -2497185151U, -2496967981U, -2496751651U, -2496536257U, -2496318859U, -2496101129U, -2495884337U, -2495667091U, -2495449483U, -2495234069U, -2495015851U, -2494798981U, -2494586071U, -2494369567U, -2494153777U, -2493936787U, -2493720041U, -2493503279U, -2493288713U, -2493072847U, -2492855327U, -2492639627U, -2492424367U, -2492206993U, -2491988657U, -2491772527U, -2491556789U, -2491340471U, -2491123897U, -2490906919U, -2490690511U, -2490473023U, -2490256157U, -2490039371U, -2489824397U, -2489606737U, -2489386771U, -2489169691U, -2488953791U, -2488738607U, -2488524167U, -2488307113U, -2488089367U, -2487872069U, -2487655309U, -2487439177U, -2487224461U, -2487006499U, -2486788963U, -2486573101U, -2486356783U, -2486139791U, -2485923217U, -2485705493U, -2485487957U, -2485271471U, -2485052771U, -2484839933U, -2484624929U, -2484408247U, -2484192527U, -2483973307U, -2483759609U, -2483543987U, -2483328161U, -2483109467U, -2482893463U, -2482675901U, -2482457161U, -2482241299U, -2482026611U, -2481810781U, -2481595201U, -2481379739U, -2481163543U, -2480947769U, -2480731301U, -2480516641U, -2480302337U, -2480086997U, -2479867427U, -2479650223U, -2479434857U, -2479215799U, -2479001621U, -2478785357U, -2478571189U, -2478356417U, -2478141383U, -2477923397U, -2477707373U, -2477488961U, -2477271481U, -2477057941U, -2476842673U, -2476624159U, -2476409263U, -2476193219U, -2475977579U, -2475761023U, -2475543029U, -2475328783U, -2475110999U, -2474890879U, -2474674327U, -2474459227U, -2474244041U, -2474029147U, -2473812701U, -2473596403U, -2473381349U, -2473165927U, -2472951167U, -2472735413U, -2472520727U, -2472307091U, -2472091723U, -2471874173U, -2471656697U, -2471441579U, -2471224237U, -2471006873U, -2470790431U, -2470575083U, -2470358629U, -2470143691U, -2469927209U, -2469711271U, -2469499757U, -2469281999U, -2469064889U, -2468847947U, -2468629519U, -2468413229U, -2468197247U, -2467983239U, -2467766527U, -2467549933U, -2467333889U, -2467116077U, -2466900307U, -2466683279U, -2466465941U, -2466249673U, -2466036497U, -2465821507U, -2465604553U, -2465388727U, -2465172733U, -2464957717U, -2464740137U, -2464523959U, -2464308311U, -2464091587U, -2463874783U, -2463659027U, -2463441269U, -2463225563U, -2463010027U, -2462791873U, -2462574523U, -2462356487U, -2462139853U, -2461922713U, -2461706603U, -2461490771U, -2461272043U, -2461055423U, -2460842491U, -2460624181U, -2460409169U, -2460192541U, -2459976229U, -2459758421U, -2459540911U, -2459325443U, -2459107793U, -2458892551U, -2458677601U, -2458461193U, -2458243223U, -2458027157U, -2457811933U, -2457594323U, -2457378923U, -2457161789U, -2456946269U, -2456730629U, -2456513639U, -2456297149U, -2456079463U, -2455863857U, -2455649191U, -2455433069U, -2455218023U, -2455004333U, -2454788311U, -2454571607U, -2454356581U, -2454139231U, -2453920571U, -2453704789U, -2453488979U, -2453271463U, -2453054039U, -2452840781U, -2452623821U, -2452410967U, -2452195063U, -2451976601U, -2451763159U, -2451547559U, -2451331549U, -2451116651U, -2450900741U, -2450682943U, -2450465513U, -2450249993U, -2450033627U, -2449816027U, -2449597919U, -2449381289U, -2449162117U, -2448946469U, -2448729883U, -2448513373U, -2448294643U, -2448077341U, -2447859991U, -2447646029U, -2447430317U, -2447215081U, -2446995403U, -2446778861U, -2446563043U, -2446347913U, -2446130653U, -2445914279U, -2445699913U, -2445483571U, -2445267343U, -2445053797U, -2444836921U, -2444622311U, -2444408423U, -2444189777U, -2443974557U, -2443759229U, -2443540247U, -2443324393U, -2443106177U, -2442890503U, -2442673561U, -2442456791U, -2442241667U, -2442025237U, -2441808221U, -2441594489U, -2441376631U, -2441160893U, -2440945873U, -2440728361U, -2440510843U, -2440294657U, -2440080157U, -2439865657U, -2439651391U, -2439433319U, -2439217799U, -2439004261U, -2438787661U, -2438570569U, -2438355421U, -2438138531U, -2437923409U, -2437707127U, -2437492373U, -2437275517U, -2437061327U, -2436844313U, -2436629971U, -2436414881U, -2436198631U, -2435981077U, -2435762471U, -2435546731U, -2435333387U, -2435115047U, -2434897891U, -2434683133U, -2434464391U, -2434247779U, -2434031381U, -2433816977U, -2433598367U, -2433382891U, -2433166579U, -2432951363U, -2432734259U, -2432519267U, -2432303207U, -2432088437U, -2431871549U, -2431654009U, -2431438567U, -2431222883U, -2431004551U, -2430789007U, -2430572239U, -2430357899U, -2430140243U, -2429923631U, -2429708647U, -2429490697U, -2429277119U, -2429059631U, -2428841551U, -2428626203U, -2428410749U, -2428193741U, -2427976979U, -2427760243U, -2427542993U, -2427328229U, -2427113081U, -2426897147U, -2426680747U, -2426465647U, -2426250041U, -2426034613U, -2425818701U, -2425601929U, -2425385723U, -2425169891U, -2424956221U, -2424741701U, -2424525161U, -2424310661U, -2424093157U, -2423875841U, -2423659657U, -2423445293U, -2423230783U, -2423015821U, -2422799177U, -2422585771U, -2422367743U, -2422152179U, -2421936493U, -2421719873U, -2421503983U, -2421287081U, -2421068899U, -2420852347U, -2420636627U, -2420420903U, -2420204023U, -2419987799U, -2419771187U, -2419554157U, -2419338787U, -2419124819U, -2418907529U, -2418693047U, -2418479549U, -2418264571U, -2418048331U, -2417831257U, -2417614807U, -2417399119U, -2417184257U, -2416967611U, -2416752409U, -2416536271U, -2416319387U, -2416105057U, -2415886301U, -2415670069U, -2415453023U, -2415235709U, -2415018433U, -2414803031U, -2414586983U, -2414370943U, -2414155213U, -2413940083U, -2413723471U, -2413506059U, -2413290541U, -2413073251U, -2412857789U, -2412643193U, -2412426707U, -2412211163U, -2411993867U, -2411776583U, -2411562311U, -2411345479U, -2411129923U, -2410914791U, -2410699133U, -2410481377U, -2410266007U, -2410048829U, -2409832129U, -2409617663U, -2409401249U, -2409184651U, -2408968189U, -2408751419U, -2408534461U, -2408320127U, -2408104597U, -2407888957U, -2407671853U, -2407458671U, -2407241731U, -2407025459U, -2406810563U, -2406592847U, -2406378241U, -2406160049U, -2405944223U, -2405727229U, -2405511811U, -2405297623U, -2405082629U, -2404866197U, -2404648957U, -2404432183U, -2404215091U, -2403999487U, -2403782401U, -2403567059U, -2403350249U, -2403134623U, -2402919731U, -2402704211U, -2402489473U, -2402272571U, -2402054147U, -2401837289U, -2401621687U, -2401406131U, -2401189979U, -2400973123U, -2400757439U, -2400539651U, -2400323077U, -2400105919U, -2399889293U, -2399675141U, -2399460449U, -2399245733U, -2399029231U, -2398813981U, -2398597219U, -2398379413U, -2398164833U, -2397948569U, -2397732923U, -2397515801U, -2397299549U, -2397085021U, -2396867801U, -2396653109U, -2396435089U, -2396217739U, -2395999153U, -2395783231U, -2395566959U, -2395350827U, -2395135343U, -2394920179U, -2394702979U, -2394486719U, -2394270059U, -2394055669U, -2393840479U, -2393622653U, -2393406401U, -2393190893U, -2392975477U, -2392759277U, -2392544101U, -2392327433U, -2392113121U, -2391896839U, -2391678997U, -2391461393U, -2391247091U, -2391031847U, -2390816957U, -2390600393U, -2390384861U, -2390168317U, -2389953641U, -2389736719U, -2389520779U, -2389304989U, -2389091333U, -2388874603U, -2388658969U, -2388442499U, -2388225803U, -2388006067U, -2387791751U, -2387577977U, -2387360413U, -2387144453U, -2386930687U, -2386714199U, -2386497403U, -2386279781U, -2386064861U, -2385851509U, -2385635543U, -2385420431U, -2385202607U, -2384985487U, -2384769461U, -2384554421U, -2384337071U, -2384122519U, -2383906543U, -2383692127U, -2383476829U, -2383262647U, -2383047829U, -2382830459U, -2382615419U, -2382400133U, -2382184537U, -2381968223U, -2381751839U, -2381535539U, -2381318791U, -2381103733U, -2380886887U, -2380673297U, -2380455919U, -2380238759U, -2380021361U, -2379807751U, -2379591671U, -2379377153U, -2379160853U, -2378944891U, -2378727539U, -2378510513U, -2378293279U, -2378076593U, -2377861237U, -2377644917U, -2377429697U, -2377213193U, -2376996647U, -2376782251U, -2376566029U, -2376349571U, -2376133733U, -2375919907U, -2375704391U, -2375485579U, -2375270591U, -2375054579U, -2374837373U, -2374621817U, -2374406971U, -2374192853U, -2373976057U, -2373760531U, -2373545989U, -2373327241U, -2373111347U, -2372894317U, -2372680469U, -2372464907U, -2372249629U, -2372032771U, -2371818637U, -2371601437U, -2371383727U, -2371168507U, -2370952511U, -2370736603U, -2370518873U, -2370304579U, -2370089479U, -2369872579U, -2369658763U, -2369441329U, -2369224889U, -2369010191U, -2368793017U, -2368578991U, -2368362539U, -2368147211U, -2367932341U, -2367716921U, -2367502859U, -2367286853U, -2367071513U, -2366857811U, -2366642171U, -2366426123U, -2366209843U, -2365994641U, -2365779181U, -2365561397U, -2365345733U, -2365130297U, -2364913519U, -2364698551U, -2364482947U, -2364266941U, -2364048899U, -2363831777U, -2363616797U, -2363399443U, -2363185907U, -2362970219U, -2362753663U, -2362538753U, -2362325137U, -2362108759U, -2361891607U, -2361677057U, -2361460697U, -2361244889U, -2361029521U, -2360811251U, -2360593589U, -2360377871U, -2360160973U, -2359944163U, -2359729637U, -2359513753U, -2359298749U, -2359081141U, -2358864077U, -2358647191U, -2358433151U, -2358217307U, -2358002501U, -2357786393U, -2357572391U, -2357355223U, -2357140127U, -2356922443U, -2356706927U, -2356491167U, -2356276309U, -2356060219U, -2355843337U, -2355628351U, -2355412211U, -2355196939U, -2354979299U, -2354762923U, -2354547589U, -2354332327U, -2354116403U, -2353898347U, -2353682899U, -2353467719U, -2353251041U, -2353034861U, -2352821521U, -2352608729U, -2352391733U, -2352177071U, -2351959373U, -2351743871U, -2351527331U, -2351311103U, -2351095787U, -2350880537U, -2350663867U, -2350448987U, -2350233607U, -2350018009U, -2349802193U, -2349585643U, -2349371473U, -2349154459U, -2348938483U, -2348723393U, -2348506163U, -2348290627U, -2348073529U, -2347858001U, -2347641251U, -2347426061U, -2347210109U, -2346994847U, -2346777833U, -2346563741U, -2346347957U, -2346130597U, -2345915233U, -2345700967U, -2345483321U, -2345268559U, -2345055421U, -2344836029U, -2344620749U, -2344404077U, -2344188467U, -2343971621U, -2343753989U, -2343537377U, -2343322691U, -2343106237U, -2342889763U, -2342675663U, -2342461337U, -2342245693U, -2342028907U, -2341811071U, -2341594513U, -2341380673U, -2341165823U, -2340950653U, -2340737603U, -2340521567U, -2340303299U, -2340086269U, -2339869699U, -2339651581U, -2339437049U, -2339222891U, -2339007247U, -2338790449U, -2338576003U, -2338361213U, -2338146329U, -2337927731U, -2337714713U, -2337499061U, -2337281887U, -2337065981U, -2336851397U, -2336635331U, -2336418673U, -2336202863U, -2335987399U, -2335772269U, -2335553713U, -2335341083U, -2335126153U, -2334909481U, -2334693863U, -2334479723U, -2334262787U, -2334047503U, -2333831449U, -2333616709U, -2333401867U, -2333186161U, -2332970869U, -2332755569U, -2332541017U, -2332323197U, -2332106743U, -2331891473U, -2331676169U, -2331460273U, -2331243809U, -2331029143U, -2330814481U, -2330599837U, -2330384489U, -2330164511U, -2329947589U, -2329731637U, -2329515427U, -2329299289U, -2329084333U, -2328867469U, -2328652009U, -2328436417U, -2328218201U, -2328001597U, -2327784983U, -2327571221U, -2327354473U, -2327138579U, -2326921769U, -2326706687U, -2326492871U, -2326275509U, -2326060369U, -2325845507U, -2325630133U, -2325415607U, -2325198173U, -2324982083U, -2324766023U, -2324552177U, -2324336591U, -2324119951U, -2323903651U, -2323689751U, -2323472693U, -2323258859U, -2323044107U, -2322827393U, -2322611059U, -2322394247U, -2322179177U, -2321964247U, -2321747737U, -2321531423U, -2321315869U, -2321098673U, -2320883861U, -2320668953U, -2320454753U, -2320239629U, -2320027529U, -2319811937U, -2319596449U, -2319378899U, -2319162739U, -2318945131U, -2318727809U, -2318510639U, -2318296021U, -2318078921U, -2317863337U, -2317645181U, -2317427533U, -2317209683U, -2316994513U, -2316778027U, -2316562777U, -2316347219U, -2316132769U, -2315916809U, -2315702513U, -2315487613U, -2315271197U, -2315055979U, -2314841521U, -2314625671U, -2314411019U, -2314197409U, -2313983249U, -2313767077U, -2313551609U, -2313335711U, -2313119387U, -2312904719U, -2312689363U, -2312472829U, -2312256629U, -2312040277U, -2311822883U, -2311606477U, -2311392157U, -2311180061U, -2310965303U, -2310751957U, -2310537049U, -2310322247U, -2310106033U, -2309889749U, -2309673881U, -2309456431U, -2309242093U, -2309026361U, -2308810601U, -2308595363U, -2308379243U, -2308164263U, -2307949739U, -2307733583U, -2307514733U, -2307299173U, -2307083393U, -2306868197U, -2306651671U, -2306436793U, -2306223461U, -2306007931U, -2305792133U, -2305573537U, -2305358221U, -2305141999U, -2304925529U, -2304710599U, -2304495799U, -2304279137U, -2304063901U, -2303847761U, -2303633251U, -2303417483U, -2303201833U, -2302986457U, -2302770469U, -2302556077U, -2302338421U, -2302121279U, -2301906433U, -2301689417U, -2301475069U, -2301260047U, -2301042587U, -2300826287U, -2300609203U, -2300394193U, -2300180731U, -2299964179U, -2299748471U, -2299534609U, -2299320679U, -2299105141U, -2298888577U, -2298672281U, -2298456929U, -2298242797U, -2298027227U, -2297811077U, -2297594521U, -2297378177U, -2297160329U, -2296945369U, -2296729447U, -2296513621U, -2296300339U, -2296084877U, -2295871601U, -2295656147U, -2295440813U, -2295224741U, -2295008923U, -2294792809U, -2294578633U, -2294364481U, -2294148251U, -2293932703U, -2293718041U, -2293502089U, -2293287109U, -2293071899U, -2292855451U, -2292641287U, -2292422921U, -2292208781U, -2291993437U, -2291777737U, -2291564321U, -2291348981U, -2291133973U, -2290918037U, -2290702693U, -2290489129U, -2290270789U, -2290053737U, -2289838373U, -2289621101U, -2289405653U, -2289190741U, -2288976737U, -2288762257U, -2288547733U, -2288330609U, -2288117243U, -2287900829U, -2287686169U, -2287468607U, -2287251751U, -2287037479U, -2286824389U, -2286608047U, -2286394637U, -2286182329U, -2285966717U, -2285752123U, -2285536247U, -2285320237U, -2285106023U, -2284891771U, -2284674407U, -2284457257U, -2284241537U, -2284026853U, -2283811573U, -2283596327U, -2283380261U, -2283161161U, -2282946331U, -2282730977U, -2282518223U, -2282301737U, -2282084897U, -2281870651U, -2281654673U, -2281437143U, -2281221827U, -2281004771U, -2280789233U, -2280573557U, -2280359363U, -2280142591U, -2279927491U, -2279711261U, -2279494291U, -2279276653U, -2279060527U, -2278846901U, -2278628909U, -2278411781U, -2278196407U, -2277980993U, -2277763753U, -2277549089U, -2277334771U, -2277118411U, -2276902399U, -2276688613U, -2276472853U, -2276256329U, -2276042711U, -2275828517U, -2275612679U, -2275397063U, -2275181479U, -2274965159U, -2274748517U, -2274535463U, -2274319609U, -2274107327U, -2273891549U, -2273676997U, -2273462767U, -2273248399U, -2273032639U, -2272818917U, -2272605253U, -2272389437U, -2272172081U, -2271957209U, -2271743939U, -2271528041U, -2271313729U, -2271098429U, -2270884471U, -2270669353U, -2270455567U, -2270240681U, -2270025151U, -2269809527U, -2269596941U, -2269382131U, -2269165319U, -2268951577U, -2268735797U, -2268517921U, -2268302123U, -2268086111U, -2267870603U, -2267656903U, -2267442757U, -2267227777U, -2267012081U, -2266797487U, -2266582793U, -2266368007U, -2266153339U, -2265938137U, -2265722351U, -2265506083U, -2265290141U, -2265075049U, -2264860427U, -2264644769U, -2264428451U, -2264214773U, -2263997711U, -2263782289U, -2263565729U, -2263352327U, -2263137001U, -2262920839U, -2262705761U, -2262492191U, -2262278069U, -2262062813U, -2261848051U, -2261633197U, -2261418409U, -2261204657U, -2260990273U, -2260774759U, -2260560277U, -2260345247U, -2260129169U, -2259914563U, -2259700207U, -2259484361U, -2259267151U, -2259053309U, -2258839753U, -2258625431U, -2258409821U, -2258192591U, -2257975997U, -2257761001U, -2257544407U, -2257329817U, -2257113083U, -2256895787U, -2256679597U, -2256466463U, -2256251911U, -2256035759U, -2255819249U, -2255604433U, -2255387119U, -2255171729U, -2254957261U, -2254742569U, -2254525633U, -2254311419U, -2254096151U, -2253881089U, -2253665009U, -2253448303U, -2253232537U, -2253017629U, -2252801377U, -2252586353U, -2252370139U, -2252154943U, -2251940153U, -2251724287U, -2251508141U, -2251293211U, -2251080107U, -2250864989U, -2250650741U, -2250437317U, -2250221147U, -2250007937U, -2249792849U, -2249577443U, -2249360747U, -2249143511U, -2248928303U, -2248714289U, -2248500389U, -2248282607U, -2248066363U, -2247851681U, -2247636583U, -2247421817U, -2247207073U, -2246990947U, -2246775449U, -2246560403U, -2246348051U, -2246132507U, -2245917799U, -2245703177U, -2245488887U, -2245273741U, -2245058089U, -2244843721U, -2244629719U, -2244412999U, -2244197437U, -2243982737U, -2243769653U, -2243551433U, -2243337457U, -2243120419U, -2242904581U, -2242688449U, -2242473991U, -2242259861U, -2242043599U, -2241825133U, -2241609701U, -2241395071U, -2241180787U, -2240967343U, -2240751923U, -2240536327U, -2240319527U, -2240105237U, -2239888687U, -2239674629U, -2239458203U, -2239244101U, -2239028387U, -2238815521U, -2238600541U, -2238383569U, -2238167417U, -2237952851U, -2237735261U, -2237518081U, -2237301083U, -2237088229U, -2236873019U, -2236658693U, -2236444453U, -2236229201U, -2236016201U, -2235800159U, -2235586427U, -2235370021U, -2235154721U, -2234939537U, -2234725013U, -2234510909U, -2234295191U, -2234081099U, -2233866847U, -2233652459U, -2233436629U, -2233218679U, -2233003183U, -2232789619U, -2232571813U, -2232355067U, -2232138367U, -2231922923U, -2231708449U, -2231493413U, -2231277413U, -2231061221U, -2230846967U, -2230632791U, -2230417751U, -2230201531U, -2229985133U, -2229769579U, -2229554461U, -2229340651U, -2229128767U, -2228912453U, -2228698319U, -2228481883U, -2228267953U, -2228051513U, -2227836329U, -2227622203U, -2227408321U, -2227192519U, -2226974441U, -2226760573U, -2226547241U, -2226332261U, -2226116807U, -2225900503U, -2225684207U, -2225468123U, -2225253677U, -2225039759U, -2224826473U, -2224610537U, -2224393937U, -2224179077U, -2223962707U, -2223747133U, -2223531173U, -2223316279U, -2223098953U, -2222882659U, -2222668169U, -2222453179U, -2222236673U, -2222020433U, -2221805137U, -2221591007U, -2221375883U, -2221160077U, -2220945563U, -2220729323U, -2220513517U, -2220299443U, -2220085447U, -2219871361U, -2219657239U, -2219440397U, -2219226643U, -2219013089U, -2218798327U, -2218581803U, -2218365979U, -2218151977U, -2217936223U, -2217720587U, -2217503231U, -2217288769U, -2217073951U, -2216859137U, -2216643199U, -2216429123U, -2216217607U, -2216003639U, -2215785851U, -2215570163U, -2215356079U, -2215137607U, -2214921911U, -2214707081U, -2214490303U, -2214276599U, -2214059119U, -2213841127U, -2213626687U, -2213409799U, -2213195329U, -2212980269U, -2212766779U, -2212554011U, -2212339553U, -2212125329U, -2211910373U, -2211695159U, -2211479729U, -2211262793U, -2211046499U, -2210831927U, -2210615761U, -2210401003U, -2210185847U, -2209971091U, -2209755451U, -2209536949U, -2209322803U, -2209108799U, -2208892547U, -2208677441U, -2208463339U, -2208247117U, -2208034453U, -2207819147U, -2207604541U, -2207391643U, -2207176733U, -2206959901U, -2206745909U, -2206531433U, -2206317367U, -2206101241U, -2205886327U, -2205671543U, -2205456833U, -2205243319U, -2205027023U, -2204811307U, -2204595641U, -2204379659U, -2204165801U, -2203948541U, -2203733117U, -2203517681U, -2203300223U, -2203086371U, -2202871961U, -2202654689U, -2202436493U, -2202221279U, -2202004547U, -2201791373U, -2201574377U, -2201360167U, -2201145061U, -2200928497U, -2200714381U, -2200498441U, -2200281751U, -2200068601U, -2199853559U, -2199635749U, -2199418691U, -2199204421U, -2198990219U, -2198773793U, -2198559829U, -2198343977U, -2198127923U, -2197912859U, -2197698263U, -2197483471U, -2197269587U, -2197052761U, -2196839891U, -2196623977U, -2196407699U, -2196193177U, -2195978129U, -2195763049U, -2195548093U, -2195333801U, -2195118769U, -2194903967U, -2194689127U, -2194475233U, -2194259981U, -2194045093U, -2193829657U, -2193615779U, -2193400303U, -2193183463U, -2192968597U, -2192753141U, -2192540993U, -2192325229U, -2192109989U, -2191894543U, -2191680791U, -2191463497U, -2191249147U, -2191034509U, -2190820267U, -2190606317U, -2190390899U, -2190174199U, -2189958893U, -2189743967U, -2189528807U, -2189313311U, -2189096633U, -2188880977U, -2188665929U, -2188452439U, -2188238047U, -2188022989U, -2187806953U, -2187592339U, -2187375787U, -2187160567U, -2186947853U, -2186734469U, -2186520907U, -2186305777U, -2186090447U, -2185874939U, -2185660657U, -2185444423U, -2185228519U, -2185014731U, -2184798521U, -2184583937U, -2184368803U, -2184153427U, -2183937773U, -2183724187U, -2183508791U, -2183292037U, -2183077639U, -2182862839U, -2182647839U, -2182430443U, -2182214731U, -2181997007U, -2181781843U, -2181567317U, -2181352403U, -2181134429U, -2180919913U, -2180705173U, -2180489261U, -2180274289U, -2180059613U, -2179844789U, -2179628147U, -2179411453U, -2179195943U, -2178981173U, -2178765881U, -2178552247U, -2178338983U, -2178124589U, -2177911657U, -2177695537U, -2177480443U, -2177264501U, -2177048869U, -2176833577U, -2176622813U, -2176405919U, -2176191037U, -2175977563U, -2175761669U, -2175546547U, -2175332921U, -2175118607U, -2174905169U, -2174691347U, -2174474537U, -2174260867U, -2174044051U, -2173830367U, -2173613773U, -2173400321U, -2173182191U, -2172969907U, -2172756941U, -2172541463U, -2172324157U, -2172107263U, -2171892293U, -2171676751U, -2171462441U, -2171245553U, -2171030177U, -2170817087U, -2170603703U, -2170388111U, -2170175779U, -2169961919U, -2169744097U, -2169531443U, -2169315259U, -2169100067U, -2168884763U, -2168668939U, -2168454077U, -2168240089U, -2168025037U, -2167808509U, -2167594523U, -2167378901U, -2167164107U, -2166947911U, -2166735047U, -2166519647U, -2166305593U, -2166090191U, -2165877419U, -2165660327U, -2165445811U, -2165231377U, -2165016067U, -2164800061U, -2164584337U, -2164370653U, -2164156157U, -2163937541U, -2163722377U, -2163510857U, -2163294317U, -2163076691U, -2162863051U, -2162648759U, -2162435339U, -2162219417U, -2162005633U, -2161788371U, -2161572109U, -2161357039U, -2161143913U, -2160930071U, -2160715201U, -2160498959U, -2160284281U, -2160071057U, -2159857957U, -2159644441U, -2159431277U, -2159216399U, -2158999463U, -2158783609U, -2158570681U, -2158353931U, -2158136809U, -2157922717U, -2157706357U, -2157490921U, -2157278737U, -2157063401U, -2156846201U, -2156631929U, -2156417051U, -2156202101U, -2155984819U, -2155770917U, -2155555967U, -2155339559U, -2155125689U, -2154911813U, -2154697789U, -2154481897U, -2154267373U, -2154053557U, -2153838251U, -2153623891U, -2153409701U, -2153194049U, -2152977367U, -2152761631U, -2152549747U, -2152334189U, -2152120979U, -2151905143U, -2151690707U, -2151475523U, -2151261493U, -2151045469U, -2150830289U, -2150614667U, -2150399893U, -2150187059U, -2149972697U, -2149756703U, -2149543889U, -2149327627U, -2149112429U, -2148896411U, -2148679669U, -2148466009U, -2148250061U, -2148035749U, -2147821513U, -2147607401U, -2147392201U, -2147178329U, -2146961347U, -2146748057U, -2146533959U, -2146317191U, -2146102477U, -2145889267U, -2145675289U, -2145460909U, -2145248167U, -2145033001U, -2144818411U, -2144602787U, -2144389217U, -2144174281U, -2143959581U, -2143744997U, -2143529491U, -2143314917U, -2143101241U, -2142887399U, -2142671353U, -2142457117U, -2142240403U, -2142027137U, -2141814319U, -2141596757U, -2141383633U, -2141168963U, -2140954709U, -2140740733U, -2140527553U, -2140313443U, -2140096993U, -2139883771U, -2139669449U, -2139456377U, -2139240409U, -2139025991U, -2138809969U, -2138593397U, -2138376997U, -2138163977U, -2137948823U, -2137734017U, -2137517407U, -2137301819U, -2137086989U, -2136872957U, -2136658427U, -2136442873U, -2136229309U, -2136014159U, -2135798803U, -2135582873U, -2135366899U, -2135151517U, -2134935289U, -2134721027U, -2134508581U, -2134293869U, -2134076557U, -2133860653U, -2133647933U, -2133431987U, -2133216271U, -2133000449U, -2132785727U, -2132571839U, -2132356769U, -2132141177U, -2131927409U, -2131711019U, -2131494667U, -2131280273U, -2131062221U, -2130845993U, -2130632453U, -2130418541U, -2130203653U, -2129987053U, -2129772677U, -2129556967U, -2129342653U, -2129127817U, -2128912277U, -2128695007U, -2128478327U, -2128264429U, -2128050467U, -2127837703U, -2127623801U, -2127408931U, -2127193907U, -2126978179U, -2126761667U, -2126547263U, -2126332057U, -2126115379U, -2125901263U, -2125684789U, -2125470601U, -2125257157U, -2125041631U, -2124825877U, -2124610991U, -2124395233U, -2124182597U, -2123968739U, -2123753647U, -2123537153U, -2123322571U, -2123108069U, -2122892371U, -2122672733U, -2122457621U, -2122243469U, -2122030279U, -2121815011U, -2121602663U, -2121386779U, -2121170593U, -2120957849U, -2120743579U, -2120527163U, -2120310461U, -2120094611U, -2119880879U, -2119665617U, -2119452541U, -2119237949U, -2119023493U, -2118807931U, -2118592439U, -2118377557U, -2118162689U, -2117948653U, -2117734709U, -2117518787U, -2117303467U, -2117087933U, -2116872119U, -2116657061U, -2116443677U, -2116230829U, -2116016173U, -2115801371U, -2115585181U, -2115369701U, -2115153727U, -2114938379U, -2114722927U, -2114507833U, -2114296181U, -2114083091U, -2113870123U, -2113654157U, -2113441021U, -2113224103U, -2113012547U, -2112798203U, -2112583841U, -2112367709U, -2112151631U, -2111937301U, -2111724911U, -2111509861U, -2111295701U, -2111081629U, -2110866419U, -2110651363U, -2110438397U, -2110223261U, -2110009829U, -2109797897U, -2109582913U, -2109369523U, -2109152387U, -2108937829U, -2108720821U, -2108508851U, -2108295751U, -2108080607U, -2107865293U, -2107650091U, -2107436741U, -2107222657U, -2107007647U, -2106792673U, -2106576917U, -2106359917U, -2106144197U, -2105930401U, -2105715049U, -2105501309U, -2105287433U, -2105073029U, -2104858771U, -2104647023U, -2104433021U, -2104219151U, -2104005019U, -2103788759U, -2103574393U, -2103359521U, -2103143461U, -2102929097U, -2102714129U, -2102500709U, -2102287063U, -2102071733U, -2101858169U, -2101644367U, -2101430251U, -2101215421U, -2101000631U, -2100786707U, -2100573677U, -2100356977U, -2100144953U, -2099929943U, -2099714203U, -2099498983U, -2099284679U, -2099070541U, -2098855537U, -2098641661U, -2098426349U, -2098211051U, -2097996079U, -2097777797U, -2097563203U, -2097349259U, -2097134239U, -2096920559U, -2096705759U, -2096492033U, -2096275873U, -2096060987U, -2095845113U, -2095630739U, -2095417099U, -2095204193U, -2094990617U, -2094777257U, -2094563689U, -2094349931U, -2094135709U, -2093917997U, -2093703973U, -2093489929U, -2093275181U, -2093060483U, -2092847143U, -2092631617U, -2092415669U, -2092200577U, -2091986231U, -2091773147U, -2091560467U, -2091343981U, -2091128869U, -2090914373U, -2090697439U, -2090484707U, -2090271769U, -2090056609U, -2089841513U, -2089626109U, -2089413709U, -2089199999U, -2088986687U, -2088770249U, -2088557147U, -2088342253U, -2088126977U, -2087912909U, -2087700257U, -2087485703U, -2087269703U, -2087054653U, -2086840409U, -2086626083U, -2086411141U, -2086194871U, -2085979487U, -2085764441U, -2085549139U, -2085334943U, -2085119369U, -2084905873U, -2084691677U, -2084475109U, -2084259323U, -2084044163U, -2083831573U, -2083616219U, -2083402001U, -2083186583U, -2082971789U, -2082759373U, -2082545177U, -2082330127U, -2082117649U, -2081901823U, -2081688289U, -2081474251U, -2081261443U, -2081046613U, -2080831771U, -2080617281U, -2080400599U, -2080186891U, -2079971801U, -2079758281U, -2079542903U, -2079328387U, -2079114383U, -2078897809U, -2078683337U, -2078472707U, -2078257351U, -2078045183U, -2077830827U, -2077616641U, -2077400671U, -2077185667U, -2076969607U, -2076755251U, -2076538223U, -2076323617U, -2076108059U, -2075893903U, -2075679917U, -2075462471U, -2075249549U, -2075035973U, -2074823669U, -2074609139U, -2074395527U, -2074179623U, -2073964481U, -2073751951U, -2073538321U, -2073326219U, -2073110059U, -2072896093U, -2072680901U, -2072466947U, -2072251847U, -2072036851U, -2071820351U, -2071608421U, -2071392137U, -2071176323U, -2070961337U, -2070746221U, -2070532231U, -2070319253U, -2070103601U, -2069889037U, -2069675147U, -2069458541U, -2069244319U, -2069030893U, -2068817347U, -2068602559U, -2068387669U, -2068172839U, -2067958549U, -2067743423U, -2067529463U, -2067313427U, -2067097567U, -2066881273U, -2066666963U, -2066452979U, -2066238739U, -2066026559U, -2065812179U, -2065594439U, -2065379831U, -2065165519U, -2064950903U, -2064736903U, -2064522697U, -2064309791U, -2064095249U, -2063882111U, -2063669011U, -2063454871U, -2063240269U, -2063025931U, -2062811071U, -2062597567U, -2062384199U, -2062167797U, -2061955403U, -2061740983U, -2061522713U, -2061310241U, -2061094153U, -2060880043U, -2060665253U, -2060449087U, -2060235917U, -2060020987U, -2059806971U, -2059590917U, -2059377119U, -2059160731U, -2058946231U, -2058731617U, -2058517511U, -2058304147U, -2058088283U, -2057873417U, -2057656157U, -2057439991U, -2057225377U, -2057011381U, -2056797829U, -2056582037U, -2056367063U, -2056152523U, -2055938219U, -2055726181U, -2055511897U, -2055295643U, -2055080669U, -2054867093U, -2054653849U, -2054438983U, -2054223761U, -2054008921U, -2053794817U, -2053582747U, -2053368827U, -2053151159U, -2052935029U, -2052719261U, -2052503023U, -2052290129U, -2052077113U, -2051862493U, -2051648983U, -2051433383U, -2051217811U, -2051001461U, -2050788151U, -2050575347U, -2050360619U, -2050148801U, -2049934517U, -2049720053U, -2049507997U, -2049295841U, -2049080531U, -2048866219U, -2048651251U, -2048437513U, -2048223949U, -2048009279U, -2047791847U, -2047578653U, -2047363049U, -2047149409U, -2046934993U, -2046720463U, -2046506843U, -2046291199U, -2046077087U, -2045861539U, -2045647739U, -2045434463U, -2045221103U, -2045007113U, -2044792049U, -2044576769U, -2044363891U, -2044149299U, -2043936319U, -2043720761U, -2043504637U, -2043292763U, -2043078641U, -2042866541U, -2042653213U, -2042438569U, -2042225033U, -2042009527U, -2041792717U, -2041579739U, -2041363763U, -2041147879U, -2040934349U, -2040718517U, -2040504493U, -2040289607U, -2040074797U, -2039858837U, -2039645171U, -2039430467U, -2039216407U, -2039003861U, -2038790651U, -2038576081U, -2038359943U, -2038146151U, -2037932623U, -2037716911U, -2037503981U, -2037287653U, -2037073373U, -2036858851U, -2036643893U, -2036429471U, -2036215387U, -2036000677U, -2035784449U, -2035570907U, -2035354273U, -2035139747U, -2034925411U, -2034711461U, -2034497363U, -2034284051U, -2034072233U, -2033859251U, -2033644259U, -2033431303U, -2033216407U, -2033002691U, -2032786661U, -2032573117U, -2032359227U, -2032146469U, -2031931939U, -2031718771U, -2031504173U, -2031288319U, -2031072521U, -2030860333U, -2030646193U, -2030432291U, -2030217193U, -2030003243U, -2029787321U, -2029573459U, -2029359097U, -2029144891U, -2028930721U, -2028716447U, -2028500113U, -2028285971U, -2028072061U, -2027854601U, -2027639671U, -2027425307U, -2027211397U, -2026995167U, -2026782997U, -2026568471U, -2026352353U, -2026140001U, -2025926909U, -2025711001U, -2025496607U, -2025283669U, -2025069139U, -2024855797U, -2024642273U, -2024426897U, -2024211479U, -2024000453U, -2023784047U, -2023568411U, -2023353641U, -2023137863U, -2022923561U, -2022708829U, -2022496247U, -2022282133U, -2022068203U, -2021852201U, -2021636473U, -2021423681U, -2021208647U, -2020993567U, -2020777973U, -2020563967U, -2020350851U, -2020136771U, -2019921859U, -2019706397U, -2019493009U, -2019277723U, -2019064589U, -2018850983U, -2018639201U, -2018424713U, -2018208637U, -2017993009U, -2017777939U, -2017562731U, -2017348253U, -2017134761U, -2016919963U, -2016705421U, -2016490933U, -2016277763U, -2016063589U, -2015850721U, -2015637157U, -2015421799U, -2015209013U, -2014994939U, -2014782433U, -2014566331U, -2014351637U, -2014137989U, -2013925063U, -2013711647U, -2013499049U, -2013286763U, -2013075139U, -2012859839U, -2012647649U, -2012431891U, -2012216867U, -2012004413U, -2011791329U, -2011576517U, -2011362433U, -2011148519U, -2010933593U, -2010720161U, -2010505199U, -2010290519U, -2010075337U, -2009859959U, -2009645977U, -2009431447U, -2009218259U, -2009003429U, -2008787149U, -2008574681U, -2008360573U, -2008145099U, -2007930259U, -2007716329U, -2007502459U, -2007286573U, -2007071909U, -2006858713U, -2006644403U, -2006430821U, -2006218061U, -2006003647U, -2005789979U, -2005575623U, -2005364209U, -2005151389U, -2004935551U, -2004721613U, -2004506423U, -2004292663U, -2004078577U, -2003863541U, -2003650409U, -2003440357U, -2003225123U, -2003010937U, -2002796941U, -2002581443U, -2002369483U, -2002153999U, -2001941651U, -2001729157U, -2001516353U, -2001301853U, -2001088319U, -2000875991U, -2000662501U, -2000447263U, -2000234189U, -2000021819U, -1999805713U, -1999591519U, -1999377031U, -1999163767U, -1998946837U, -1998733271U, -1998518189U, -1998303647U, -1998088991U, -1997874821U, -1997659667U, -1997445841U, -1997235533U, -1997021729U, -1996806061U, -1996589219U, -1996372933U, -1996159237U, -1995945257U, -1995733277U, -1995516739U, -1995302677U, -1995089477U, -1994873599U, -1994659547U, -1994447443U, -1994233277U, -1994020141U, -1993804573U, -1993591349U, -1993377929U, -1993161893U, -1992947581U, -1992735991U, -1992521611U, -1992307687U, -1992093223U, -1991878487U, -1991663129U, -1991450303U, -1991237041U, -1991022613U, -1990808779U, -1990594729U, -1990379987U, -1990165141U, -1989950267U, -1989736093U, -1989522463U, -1989308263U, -1989094451U, -1988879909U, -1988668001U, -1988453771U, -1988239081U, -1988022431U, -1987809871U, -1987597069U, -1987382933U, -1987166897U, -1986953041U, -1986741131U, -1986525991U, -1986312707U, -1986097783U, -1985884553U, -1985668123U, -1985453983U, -1985239303U, -1985025799U, -1984808653U, -1984596529U, -1984382563U, -1984169507U, -1983958577U, -1983743011U, -1983527261U, -1983314681U, -1983099403U, -1982885549U, -1982671441U, -1982456033U, -1982243303U, -1982026903U, -1981813313U, -1981600333U, -1981386437U, -1981174301U, -1980956819U, -1980744853U, -1980530767U, -1980316879U, -1980102307U, -1979890327U, -1979675213U, -1979460403U, -1979246653U, -1979031823U, -1978817069U, -1978604077U, -1978390889U, -1978178009U, -1977963947U, -1977749701U, -1977534121U, -1977320621U, -1977108079U, -1976893027U, -1976678113U, -1976464909U, -1976253337U, -1976037941U, -1975823131U, -1975607279U, -1975395517U, -1975179749U, -1974966589U, -1974752149U, -1974538739U, -1974325789U, -1974111697U, -1973900053U, -1973685503U, -1973472451U, -1973255929U, -1973042179U, -1972827331U, -1972612991U, -1972401703U, -1972186661U, -1971974149U, -1971760337U, -1971547093U, -1971334973U, -1971122009U, -1970910197U, -1970696591U, -1970480849U, -1970265071U, -1970049421U, -1969836083U, -1969621729U, -1969408369U, -1969193627U, -1968979921U, -1968765377U, -1968552293U, -1968339173U, -1968125447U, -1967912579U, -1967699759U, -1967485391U, -1967270213U, -1967054437U, -1966839869U, -1966624633U, -1966410613U, -1966194941U, -1965982463U, -1965767701U, -1965554191U, -1965341783U, -1965125849U, -1964913271U, -1964698751U, -1964484989U, -1964271983U, -1964054333U, -1963841857U, -1963626869U, -1963415351U, -1963201589U, -1962987557U, -1962773513U, -1962559147U, -1962341369U, -1962128447U, -1961914793U, -1961701477U, -1961488423U, -1961275501U, -1961060869U, -1960848299U, -1960633061U, -1960417241U, -1960204229U, -1959988241U, -1959770467U, -1959554581U, -1959344813U, -1959133037U, -1958918903U, -1958704933U, -1958490823U, -1958275273U, -1958060563U, -1957848889U, -1957634227U, -1957421957U, -1957206529U, -1956991991U, -1956777359U, -1956563137U, -1956349627U, -1956136801U, -1955922713U, -1955709199U, -1955494259U, -1955281897U, -1955067349U, -1954854449U, -1954638899U, -1954424539U, -1954210151U, -1953996521U, -1953781757U, -1953568061U, -1953354313U, -1953138323U, -1952924947U, -1952711471U, -1952499607U, -1952285947U, -1952073337U, -1951860359U, -1951646947U, -1951429421U, -1951215599U, -1951001777U, -1950789343U, -1950577147U, -1950364093U, -1950151409U, -1949937593U, -1949722681U, -1949510449U, -1949296903U, -1949084747U, -1948870019U, -1948653431U, -1948438379U, -1948225849U, -1948010171U, -1947797431U, -1947584029U, -1947369353U, -1947156833U, -1946945327U, -1946730593U, -1946516281U, -1946303641U, -1946090359U, -1945876957U, -1945662233U, -1945447381U, -1945234493U, -1945019243U, -1944807173U, -1944592619U, -1944378089U, -1944164279U, -1943952403U, -1943736161U, -1943523271U, -1943309701U, -1943097553U, -1942884479U, -1942669921U, -1942453361U, -1942239361U, -1942026481U, -1941812861U, -1941599599U, -1941383267U, -1941169357U, -1940955971U, -1940740007U, -1940530087U, -1940315623U, -1940101721U, -1939887941U, -1939671631U, -1939459111U, -1939246339U, -1939030463U, -1938815773U, -1938601583U, -1938388579U, -1938173087U, -1937959571U, -1937746337U, -1937530079U, -1937314759U, -1937100097U, -1936885309U, -1936673131U, -1936458907U, -1936247077U, -1936033289U, -1935819463U, -1935605239U, -1935390563U, -1935176689U, -1934965691U, -1934751667U, -1934537677U, -1934322787U, -1934110439U, -1933897331U, -1933680613U, -1933466789U, -1933253327U, -1933040761U, -1932827927U, -1932614807U, -1932400721U, -1932186007U, -1931972417U, -1931759197U, -1931545013U, -1931330741U, -1931116997U, -1930902073U, -1930690271U, -1930477583U, -1930262641U, -1930050217U, -1929835819U, -1929622771U, -1929410531U, -1929197299U, -1928981581U, -1928767499U, -1928552657U, -1928340781U, -1928126819U, -1927911509U, -1927700891U, -1927487371U, -1927272463U, -1927060243U, -1926846787U, -1926631963U, -1926417281U, -1926202891U, -1925987633U, -1925774309U, -1925560577U, -1925346653U, -1925132813U, -1924917391U, -1924703741U, -1924489667U, -1924274753U, -1924061647U, -1923848099U, -1923635011U, -1923423013U, -1923209657U, -1922995003U, -1922780593U, -1922567051U, -1922354261U, -1922142449U, -1921923569U, -1921709773U, -1921496867U, -1921285153U, -1921071419U, -1920855917U, -1920641953U, -1920426647U, -1920210139U, -1919997463U, -1919784743U, -1919571817U, -1919357707U, -1919144197U, -1918928327U, -1918716967U, -1918505287U, -1918288951U, -1918074289U, -1917859243U, -1917645077U, -1917431177U, -1917217327U, -1917001897U, -1916787517U, -1916575319U, -1916359751U, -1916145289U, -1915931917U, -1915718513U, -1915503833U, -1915291013U, -1915078507U, -1914865129U, -1914652417U, -1914438937U, -1914226511U, -1914012007U, -1913797597U, -1913583341U, -1913369903U, -1913155711U, -1912942181U, -1912728781U, -1912513847U, -1912300451U, -1912087831U, -1911873253U, -1911657779U, -1911442763U, -1911231353U, -1911015773U, -1910802847U, -1910588893U, -1910375063U, -1910162201U, -1909948321U, -1909733303U, -1909520323U, -1909307419U, -1909093247U, -1908879877U, -1908664063U, -1908449857U, -1908236677U, -1908022811U, -1907810987U, -1907598467U, -1907384467U, -1907169083U, -1906953211U, -1906739209U, -1906525109U, -1906310951U, -1906096999U, -1905884731U, -1905673373U, -1905457363U, -1905243209U, -1905029017U, -1904816713U, -1904602537U, -1904389517U, -1904176861U, -1903963189U, -1903749361U, -1903537567U, -1903322501U, -1903108331U, -1902895109U, -1902682841U, -1902468143U, -1902255833U, -1902042173U, -1901825033U, -1901610857U, -1901394977U, -1901180863U, -1900966337U, -1900753301U, -1900539409U, -1900326377U, -1900115621U, -1899902029U, -1899689683U, -1899477733U, -1899264779U, -1899050837U, -1898835283U, -1898621423U, -1898407963U, -1898196023U, -1897983083U, -1897770997U, -1897556651U, -1897344901U, -1897133809U, -1896919259U, -1896705157U, -1896491041U, -1896277457U, -1896063769U, -1895850709U, -1895636689U, -1895420279U, -1895208223U, -1894993829U, -1894782023U, -1894566353U, -1894350527U, -1894137731U, -1893924589U, -1893710851U, -1893496691U, -1893283459U, -1893069709U, -1892854861U, -1892641133U, -1892428999U, -1892215747U, -1892003387U, -1891790491U, -1891579493U, -1891362449U, -1891148263U, -1890934141U, -1890720857U, -1890507551U, -1890292267U, -1890078847U, -1889865743U, -1889652253U, -1889438801U, -1889224241U, -1889013617U, -1888800223U, -1888587439U, -1888373471U, -1888163867U, -1887952039U, -1887737603U, -1887523223U, -1887309659U, -1887096331U, -1886884289U, -1886670587U, -1886456149U, -1886240141U, -1886028191U, -1885812587U, -1885599461U, -1885386431U, -1885172129U, -1884957803U, -1884746813U, -1884531721U, -1884315151U, -1884102601U, -1883889043U, -1883673413U, -1883458481U, -1883244703U, -1883033723U, -1882821439U, -1882608839U, -1882393321U, -1882178719U, -1881963827U, -1881750943U, -1881536119U, -1881320087U, -1881108149U, -1880896177U, -1880681953U, -1880466319U, -1880252831U, -1880038367U, -1879824493U, -1879610081U, -1879395409U, -1879181047U, -1878969739U, -1878756823U, -1878542957U, -1878330583U, -1878116137U, -1877904227U, -1877689511U, -1877474453U, -1877263457U, -1877050621U, -1876835243U, -1876622257U, -1876411883U, -1876197749U, -1875985613U, -1875770417U, -1875554969U, -1875341953U, -1875126829U, -1874913457U, -1874701039U, -1874489093U, -1874272849U, -1874060159U, -1873846979U, -1873635529U, -1873421219U, -1873209713U, -1872994463U, -1872782473U, -1872569861U, -1872355663U, -1872141379U, -1871927711U, -1871713241U, -1871499821U, -1871282653U, -1871070701U, -1870859063U, -1870646521U, -1870431113U, -1870216661U, -1870002733U, -1869789989U, -1869578903U, -1869364733U, -1869150917U, -1868934923U, -1868723261U, -1868509567U, -1868296949U, -1868082787U, -1867868263U, -1867655113U, -1867441489U, -1867226723U, -1867011511U, -1866798541U, -1866586681U, -1866375299U, -1866161233U, -1865946409U, -1865732599U, -1865516353U, -1865304169U, -1865090393U, -1864877809U, -1864661059U, -1864446949U, -1864231703U, -1864019951U, -1863806657U, -1863593309U, -1863380551U, -1863168421U, -1862955293U, -1862742773U, -1862527981U, -1862316163U, -1862102299U, -1861887043U, -1861671997U, -1861458811U, -1861246481U, -1861033093U, -1860819593U, -1860606511U, -1860392983U, -1860179969U, -1859966057U, -1859753327U, -1859537033U, -1859321609U, -1859109403U, -1858896001U, -1858682179U, -1858468021U, -1858255141U, -1858040617U, -1857826583U, -1857614989U, -1857401957U, -1857189121U, -1856974877U, -1856761057U, -1856548943U, -1856334443U, -1856122343U, -1855909711U, -1855697113U, -1855485559U, -1855272659U, -1855059971U, -1854846797U, -1854633577U, -1854417667U, -1854205447U, -1853992741U, -1853779349U, -1853563861U, -1853348593U, -1853135209U, -1852922107U, -1852710059U, -1852494713U, -1852281311U, -1852068733U, -1851856651U, -1851644933U, -1851430187U, -1851217127U, -1851003919U, -1850791277U, -1850576047U, -1850363993U, -1850149817U, -1849934699U, -1849722047U, -1849507193U, -1849292813U, -1849082251U, -1848865933U, -1848650597U, -1848437771U, -1848223219U, -1848011083U, -1847798189U, -1847584031U, -1847369309U, -1847155309U, -1846942483U, -1846728739U, -1846515617U, -1846302167U, -1846089199U, -1845873173U, -1845658319U, -1845445027U, -1845234277U, -1845021179U, -1844808467U, -1844594179U, -1844381387U, -1844167673U, -1843954171U, -1843740683U, -1843527457U, -1843314307U, -1843101739U, -1842889381U, -1842677059U, -1842463939U, -1842250661U, -1842035359U, -1841822201U, -1841610737U, -1841396317U, -1841181707U, -1840969279U, -1840756397U, -1840542703U, -1840329529U, -1840114021U, -1839902681U, -1839690289U, -1839477257U, -1839262553U, -1839049451U, -1838834191U, -1838622671U, -1838409107U, -1838193991U, -1837980367U, -1837766683U, -1837552097U, -1837338709U, -1837126441U, -1836914561U, -1836700787U, -1836487573U, -1836273797U, -1836060607U, -1835848667U, -1835633953U, -1835420233U, -1835206981U, -1834993807U, -1834782097U, -1834566973U, -1834353881U, -1834140647U, -1833926671U, -1833715579U, -1833503561U, -1833293153U, -1833081637U, -1832866859U, -1832653061U, -1832438771U, -1832224573U, -1832010209U, -1831797823U, -1831585487U, -1831372853U, -1831157287U, -1830944299U, -1830730943U, -1830517193U, -1830305447U, -1830091709U, -1829876317U, -1829662273U, -1829449411U, -1829236631U, -1829023943U, -1828810271U, -1828596149U, -1828382207U, -1828170133U, -1827959183U, -1827746581U, -1827532807U, -1827317861U, -1827106199U, -1826891467U, -1826680879U, -1826467309U, -1826253997U, -1826039113U, -1825825087U, -1825610833U, -1825397839U, -1825185599U, -1824970999U, -1824757813U, -1824544453U, -1824331781U, -1824120253U, -1823907461U, -1823694571U, -1823483819U, -1823269337U, -1823056657U, -1822841029U, -1822628681U, -1822413007U, -1822199881U, -1821987077U, -1821771307U, -1821559319U, -1821348401U, -1821133981U, -1820921497U, -1820707351U, -1820492903U, -1820278483U, -1820065243U, -1819853467U, -1819640743U, -1819428503U, -1819214503U, -1818999947U, -1818786679U, -1818571829U, -1818358589U, -1818143609U, -1817931289U, -1817716661U, -1817504939U, -1817292857U, -1817077921U, -1816863773U, -1816650911U, -1816437629U, -1816224331U, -1816011343U, -1815798827U, -1815584137U, -1815372683U, -1815158353U, -1814944921U, -1814730259U, -1814519281U, -1814305679U, -1814091911U, -1813878061U, -1813665221U, -1813450559U, -1813237159U, -1813022209U, -1812810889U, -1812598517U, -1812386621U, -1812172727U, -1811959999U, -1811746201U, -1811532013U, -1811320249U, -1811105171U, -1810891699U, -1810676641U, -1810464479U, -1810251841U, -1810039403U, -1809825361U, -1809610937U, -1809398191U, -1809185471U, -1808972351U, -1808760589U, -1808548033U, -1808335171U, -1808122291U, -1807908719U, -1807695269U, -1807482529U, -1807269617U, -1807056437U, -1806843373U, -1806629173U, -1806416483U, -1806203057U, -1805989663U, -1805777483U, -1805564641U, -1805352947U, -1805137171U, -1804922843U, -1804709029U, -1804496621U, -1804282919U, -1804070239U, -1803858137U, -1803644209U, -1803430969U, -1803217879U, -1803004363U, -1802791009U, -1802576609U, -1802366077U, -1802150351U, -1801937953U, -1801724581U, -1801510229U, -1801298753U, -1801085947U, -1800871399U, -1800657197U, -1800444797U, -1800231943U, -1800018919U, -1799806523U, -1799593049U, -1799379191U, -1799166077U, -1798952293U, -1798742359U, -1798528609U, -1798316879U, -1798103999U, -1797889399U, -1797677771U, -1797463951U, -1797250849U, -1797038773U, -1796829191U, -1796613449U, -1796399977U, -1796188403U, -1795976477U, -1795764959U, -1795551127U, -1795337413U, -1795124281U, -1794911507U, -1794700001U, -1794488291U, -1794275677U, -1794061361U, -1793848423U, -1793635369U, -1793420693U, -1793210383U, -1792996691U, -1792784233U, -1792570531U, -1792358257U, -1792146007U, -1791934237U, -1791723223U, -1791509171U, -1791295381U, -1791082301U, -1790868851U, -1790656031U, -1790443537U, -1790230961U, -1790017003U, -1789805027U, -1789593419U, -1789379479U, -1789164787U, -1788954239U, -1788740491U, -1788525853U, -1788313313U, -1788099323U, -1787886053U, -1787673467U, -1787459507U, -1787246339U, -1787034257U, -1786821557U, -1786608137U, -1786394063U, -1786182059U, -1785967481U, -1785754219U, -1785541067U, -1785328469U, -1785115117U, -1784902591U, -1784691409U, -1784479457U, -1784264249U, -1784052359U, -1783837177U, -1783625471U, -1783412083U, -1783199161U, -1782985577U, -1782774361U, -1782561791U, -1782349147U, -1782135227U, -1781922349U, -1781707453U, -1781494499U, -1781281357U, -1781067257U, -1780853203U, -1780641661U, -1780427603U, -1780215917U, -1780004623U, -1779789901U, -1779579163U, -1779366067U, -1779154763U, -1778941309U, -1778728537U, -1778516123U, -1778303041U, -1778091787U, -1777879687U, -1777663243U, -1777451671U, -1777236971U, -1777025297U, -1776810323U, -1776599551U, -1776385619U, -1776175129U, -1775962709U, -1775748791U, -1775538503U, -1775324981U, -1775111743U, -1774897037U, -1774682293U, -1774468921U, -1774256161U, -1774044773U, -1773831989U, -1773617759U, -1773403967U, -1773190319U, -1772977307U, -1772763497U, -1772549873U, -1772335879U, -1772125603U, -1771913347U, -1771699337U, -1771487587U, -1771272023U, -1771059089U, -1770847583U, -1770636541U, -1770423601U, -1770210877U, -1769994487U, -1769781749U, -1769568701U, -1769356007U, -1769142241U, -1768928741U, -1768713641U, -1768501909U, -1768289251U, -1768078313U, -1767865181U, -1767649771U, -1767438721U, -1767226861U, -1767012337U, -1766798269U, -1766585551U, -1766372479U, -1766160161U, -1765946669U, -1765734799U, -1765523477U, -1765309201U, -1765095139U, -1764883123U, -1764672967U, -1764461749U, -1764246829U, -1764032813U, -1763819731U, -1763606881U, -1763393377U, -1763181727U, -1762969993U, -1762756637U, -1762543031U, -1762331981U, -1762118279U, -1761903823U, -1761692489U, -1761477937U, -1761263827U, -1761050773U, -1760839001U, -1760628371U, -1760413229U, -1760197709U, -1759985173U, -1759773131U, -1759560839U, -1759348933U, -1759135717U, -1758923039U, -1758710171U, -1758498877U, -1758285307U, -1758073949U, -1757860073U, -1757647841U, -1757436281U, -1757222959U, -1757008063U, -1756793993U, -1756581121U, -1756368917U, -1756154579U, -1755940577U, -1755728027U, -1755514219U, -1755303233U, -1755091193U, -1754878501U, -1754665361U, -1754454571U, -1754242561U, -1754030731U, -1753816681U, -1753602211U, -1753389713U, -1753176443U, -1752964153U, -1752750449U, -1752537337U, -1752324599U, -1752112291U, -1751899441U, -1751687213U, -1751473417U, -1751261329U, -1751049169U, -1750837849U, -1750623913U, -1750410733U, -1750198199U, -1749985409U, -1749773527U, -1749560107U, -1749347723U, -1749135239U, -1748924363U, -1748710897U, -1748498359U, -1748287217U, -1748070949U, -1747857149U, -1747644641U, -1747430963U, -1747216301U, -1747002469U, -1746789469U, -1746578459U, -1746366119U, -1746151037U, -1745939603U, -1745725207U, -1745513141U, -1745303071U, -1745089651U, -1744877551U, -1744663763U, -1744451789U, -1744237181U, -1744025083U, -1743814301U, -1743600853U, -1743387367U, -1743174197U, -1742962841U, -1742749471U, -1742536847U, -1742322259U, -1742111281U, -1741899253U, -1741687861U, -1741474171U, -1741258007U, -1741045811U, -1740835949U, -1740621881U, -1740408053U, -1740196361U, -1739983067U, -1739771023U, -1739558827U, -1739345351U, -1739134457U, -1738920671U, -1738707163U, -1738494731U, -1738281847U, -1738067677U, -1737856069U, -1737644603U, -1737432539U, -1737221611U, -1737006983U, -1736794487U, -1736581619U, -1736369281U, -1736154647U, -1735943387U, -1735729111U, -1735517011U, -1735305269U, -1735090199U, -1734876943U, -1734664441U, -1734449077U, -1734237377U, -1734024737U, -1733811263U, -1733597969U, -1733384509U, -1733171707U, -1732961677U, -1732746863U, -1732535537U, -1732321049U, -1732108141U, -1731895523U, -1731682793U, -1731469843U, -1731254191U, -1731041219U, -1730829523U, -1730618177U, -1730405549U, -1730192197U, -1729976291U, -1729763383U, -1729549669U, -1729337327U, -1729125011U, -1728914417U, -1728701587U, -1728488477U, -1728276799U, -1728063221U, -1727849777U, -1727635841U, -1727422667U, -1727208947U, -1726994957U, -1726783987U, -1726573733U, -1726361471U, -1726147603U, -1725936371U, -1725724123U, -1725510341U, -1725297971U, -1725083699U, -1724868617U, -1724657423U, -1724445431U, -1724230499U, -1724017907U, -1723805329U, -1723596101U, -1723381903U, -1723167899U, -1722954017U, -1722740653U, -1722527047U, -1722312811U, -1722102953U, -1721891051U, -1721678617U, -1721466457U, -1721252303U, -1721040851U, -1720830509U, -1720616329U, -1720403401U, -1720190291U, -1719977801U, -1719766823U, -1719554429U, -1719342839U, -1719129833U, -1718917727U, -1718705621U, -1718492519U, -1718278847U, -1718067781U, -1717854091U, -1717640279U, -1717427989U, -1717216279U, -1717003237U, -1716788687U, -1716577411U, -1716367007U, -1716156181U, -1715943997U, -1715731957U, -1715519549U, -1715306557U, -1715093563U, -1714882331U, -1714670413U, -1714457677U, -1714244459U, -1714031303U, -1713818269U, -1713604801U, -1713389563U, -1713178517U, -1712965213U, -1712753267U, -1712539687U, -1712328841U, -1712113927U, -1711899883U, -1711688063U, -1711475021U, -1711261333U, -1711051409U, -1710837059U, -1710624329U, -1710413077U, -1710198703U, -1709987243U, -1709773981U, -1709563153U, -1709351911U, -1709141977U, -1708930331U, -1708718107U, -1708502867U, -1708290503U, -1708076729U, -1707863831U, -1707652277U, -1707439001U, -1707227173U, -1707014329U, -1706801633U, -1706589107U, -1706378419U, -1706166377U, -1705953643U, -1705741783U, -1705531549U, -1705316959U, -1705106129U, -1704894109U, -1704681709U, -1704468937U, -1704255689U, -1704045223U, -1703832359U, -1703619641U, -1703405609U, -1703195113U, -1702983229U, -1702769197U, -1702556957U, -1702344983U, -1702131659U, -1701917627U, -1701705373U, -1701491459U, -1701278609U, -1701065897U, -1700854567U, -1700644447U, -1700429513U, -1700217709U, -1700006197U, -1699793419U, -1699580317U, -1699369627U, -1699155581U, -1698940723U, -1698727337U, -1698513253U, -1698301307U, -1698091267U, -1697877743U, -1697664337U, -1697450791U, -1697237897U, -1697025769U, -1696813771U, -1696599187U, -1696387493U, -1696177811U, -1695964349U, -1695752273U, -1695539983U, -1695328517U, -1695112499U, -1694901031U, -1694687689U, -1694475023U, -1694261953U, -1694049001U, -1693835707U, -1693622737U, -1693410343U, -1693197481U, -1692985631U, -1692774529U, -1692562093U, -1692348953U, -1692136417U, -1691923169U, -1691710081U, -1691497571U, -1691284057U, -1691071279U, -1690859791U, -1690645939U, -1690435493U, -1690223939U, -1690010563U, -1689798259U, -1689584801U, -1689374539U, -1689162413U, -1688949023U, -1688734417U, -1688524517U, -1688313817U, -1688102477U, -1687890049U, -1687679137U, -1687466219U, -1687256309U, -1687042309U, -1686831407U, -1686620363U, -1686407869U, -1686194189U, -1685982491U, -1685769949U, -1685554763U, -1685339581U, -1685127391U, -1684918171U, -1684703561U, -1684493633U, -1684280249U, -1684067551U, -1683855757U, -1683645311U, -1683433723U, -1683221711U, -1683008251U, -1682796551U, -1682583167U, -1682371753U, -1682155987U, -1681944119U, -1681733363U, -1681519849U, -1681308011U, -1681098073U, -1680884237U, -1680671623U, -1680459233U, -1680247291U, -1680031811U, -1679819293U, -1679605723U, -1679392699U, -1679181041U, -1678968337U, -1678756411U, -1678543357U, -1678332811U, -1678122869U, -1677911009U, -1677697997U, -1677485779U, -1677275011U, -1677060713U, -1676850353U, -1676637649U, -1676424697U, -1676211011U, -1676000453U, -1675787273U, -1675576393U, -1675363649U, -1675151339U, -1674939241U, -1674727057U, -1674512789U, -1674299479U, -1674087917U, -1673876467U, -1673661967U, -1673449919U, -1673235139U, -1673021521U, -1672808327U, -1672596941U, -1672384589U, -1672173589U, -1671961757U, -1671749039U, -1671536963U, -1671325529U, -1671112967U, -1670901179U, -1670689117U, -1670475277U, -1670262637U, -1670051791U, -1669837633U, -1669625107U, -1669414039U, -1669203233U, -1668990637U, -1668775393U, -1668563849U, -1668350561U, -1668138847U, -1667926867U, -1667713757U, -1667501833U, -1667287651U, -1667077777U, -1666863299U, -1666650637U, -1666439549U, -1666227977U, -1666014149U, -1665800771U, -1665591229U, -1665380273U, -1665168877U, -1664957753U, -1664744593U, -1664532421U, -1664320123U, -1664105249U, -1663891367U, -1663680947U, -1663469519U, -1663254757U, -1663042397U, -1662830083U, -1662618499U, -1662405971U, -1662195949U, -1661984659U, -1661771983U, -1661559659U, -1661347057U, -1661134081U, -1660921679U, -1660710313U, -1660497737U, -1660285441U, -1660073287U, -1659859973U, -1659645607U, -1659431777U, -1659216851U, -1659004939U, -1658794849U, -1658581553U, -1658372297U, -1658159369U, -1657946183U, -1657734823U, -1657521973U, -1657309891U, -1657097159U, -1656885457U, -1656674549U, -1656462763U, -1656251131U, -1656038099U, -1655824243U, -1655613227U, -1655398643U, -1655187257U, -1654976711U, -1654763909U, -1654550113U, -1654337563U, -1654125673U, -1653912119U, -1653698759U, -1653486361U, -1653274141U, -1653059761U, -1652848279U, -1652634989U, -1652424523U, -1652209519U, -1651998191U, -1651784759U, -1651572101U, -1651359301U, -1651147033U, -1650934469U, -1650723083U, -1650509953U, -1650298159U, -1650085873U, -1649872649U, -1649659841U, -1649449441U, -1649235881U, -1649024249U, -1648812073U, -1648598869U, -1648387141U, -1648175587U, -1647962123U, -1647750473U, -1647538483U, -1647326743U, -1647114061U, -1646903021U, -1646688727U, -1646476903U, -1646264027U, -1646051219U, -1645838983U, -1645628581U, -1645415971U, -1645204021U, -1644993293U, -1644776921U, -1644563593U, -1644351343U, -1644139267U, -1643924603U, -1643713501U, -1643499029U, -1643288453U, -1643075813U, -1642860589U, -1642648877U, -1642437869U, -1642225457U, -1642012793U, -1641801523U, -1641589661U, -1641376409U, -1641162559U, -1640952241U, -1640741437U, -1640529173U, -1640318839U, -1640106227U, -1639894213U, -1639681237U, -1639470661U, -1639257131U, -1639045273U, -1638833389U, -1638619711U, -1638407233U, -1638194989U, -1637980541U, -1637769223U, -1637559887U, -1637346769U, -1637134337U, -1636922267U, -1636710653U, -1636499873U, -1636286867U, -1636076087U, -1635863939U, -1635650407U, -1635436661U, -1635226577U, -1635015631U, -1634803927U, -1634589751U, -1634378377U, -1634166799U, -1633954739U, -1633743409U, -1633531651U, -1633318207U, -1633106641U, -1632897269U, -1632687919U, -1632475811U, -1632263639U, -1632052379U, -1631839457U, -1631626849U, -1631414489U, -1631202467U, -1630990519U, -1630778063U, -1630565177U, -1630354853U, -1630143049U, -1629931943U, -1629719171U, -1629508193U, -1629295721U, -1629082687U, -1628870843U, -1628660101U, -1628448221U, -1628236867U, -1628023801U, -1627812029U, -1627600441U, -1627389431U, -1627177001U, -1626962539U, -1626751979U, -1626539179U, -1626326791U, -1626113729U, -1625903567U, -1625691247U, -1625478037U, -1625266073U, -1625054153U, -1624841633U, -1624630261U, -1624417189U, -1624206053U, -1623992599U, -1623781619U, -1623568949U, -1623354829U, -1623142987U, -1622929513U, -1622718421U, -1622506999U, -1622294161U, -1622082901U, -1621868393U, -1621658257U, -1621446997U, -1621235573U, -1621024253U, -1620813553U, -1620603793U, -1620392623U, -1620180607U, -1619968247U, -1619753719U, -1619541383U, -1619329603U, -1619117597U, -1618904627U, -1618691989U, -1618479787U, -1618267333U, -1618055717U, -1617843229U, -1617630947U, -1617417619U, -1617204377U, -1616993519U, -1616781559U, -1616568367U, -1616356229U, -1616143759U, -1615933097U, -1615723597U, -1615509367U, -1615297399U, -1615086917U, -1614874609U, -1614661459U, -1614448681U, -1614236551U, -1614023113U, -1613812303U, -1613601079U, -1613389003U, -1613176379U, -1612963951U, -1612751549U, -1612540789U, -1612329503U, -1612118173U, -1611906383U, -1611695711U, -1611483151U, -1611271957U, -1611057827U, -1610844611U, -1610632469U, -1610418559U, -1610206529U, -1609994033U, -1609781203U, -1609569413U, -1609359209U, -1609145459U, -1608933947U, -1608720361U, -1608508801U, -1608296717U, -1608084109U, -1607870417U, -1607658197U, -1607445701U, -1607234537U, -1607022997U, -1606810687U, -1606600679U, -1606388731U, -1606176347U, -1605965227U, -1605752081U, -1605539021U, -1605328313U, -1605115663U, -1604904061U, -1604693239U, -1604480057U, -1604268389U, -1604057183U, -1603842913U, -1603631873U, -1603420561U, -1603210649U, -1603000219U, -1602789143U, -1602577609U, -1602365857U, -1602153079U, -1601940149U, -1601727781U, -1601517839U, -1601302363U, -1601090371U, -1600879667U, -1600667899U, -1600455133U, -1600242403U, -1600031369U, -1599820517U, -1599606803U, -1599396749U, -1599184751U, -1598975051U, -1598761279U, -1598549501U, -1598335411U, -1598123407U, -1597911299U, -1597700057U, -1597487621U, -1597277893U, -1597065859U, -1596852787U, -1596642133U, -1596428957U, -1596216553U, -1596002173U, -1595792243U, -1595579933U, -1595369533U, -1595158241U, -1594948063U, -1594737161U, -1594525729U, -1594311107U, -1594098707U, -1593885151U, -1593671377U, -1593458753U, -1593247781U, -1593035057U, -1592822603U, -1592610959U, -1592398513U, -1592185459U, -1591975481U, -1591765501U, -1591554421U, -1591341443U, -1591131319U, -1590920003U, -1590707633U, -1590494783U, -1590283363U, -1590070931U, -1589859377U, -1589646811U, -1589434129U, -1589223187U, -1589011031U, -1588799903U, -1588586047U, -1588375429U, -1588163957U, -1587952687U, -1587741893U, -1587529987U, -1587318851U, -1587105677U, -1586891203U, -1586680391U, -1586469947U, -1586257091U, -1586045543U, -1585835543U, -1585622579U, -1585410503U, -1585198583U, -1584985397U, -1584772169U, -1584559601U, -1584347197U, -1584135689U, -1583923169U, -1583711639U, -1583501189U, -1583290279U, -1583078971U, -1582868279U, -1582658101U, -1582445219U, -1582233599U, -1582020931U, -1581806959U, -1581596773U, -1581385601U, -1581173551U, -1580962969U, -1580751941U, -1580539157U, -1580325619U, -1580114611U, -1579903427U, -1579693151U, -1579481467U, -1579268359U, -1579056379U, -1578842593U, -1578632179U, -1578421843U, -1578209747U, -1577998151U, -1577787647U, -1577579093U, -1577369909U, -1577155537U, -1576943099U, -1576730611U, -1576521313U, -1576311547U, -1576100221U, -1575886001U, -1575674297U, -1575462277U, -1575251819U, -1575039077U, -1574829143U, -1574617871U, -1574406947U, -1574196319U, -1573984591U, -1573771307U, -1573558699U, -1573347103U, -1573134727U, -1572923981U, -1572710869U, -1572499171U, -1572285719U, -1572074671U, -1571864771U, -1571650979U, -1571438179U, -1571225417U, -1571013593U, -1570801511U, -1570589539U, -1570376557U, -1570164923U, -1569953963U, -1569742417U, -1569531179U, -1569320693U, -1569107899U, -1568896783U, -1568684263U, -1568472599U, -1568261309U, -1568048311U, -1567834613U, -1567622321U, -1567411583U, -1567200757U, -1566991141U, -1566778691U, -1566568769U, -1566357157U, -1566143399U, -1565932283U, -1565721347U, -1565509193U, -1565297891U, -1565085653U, -1564873847U, -1564660499U, -1564447433U, -1564235279U, -1564021853U, -1563811489U, -1563600547U, -1563390781U, -1563178303U, -1562966143U, -1562753519U, -1562540341U, -1562328893U, -1562116663U, -1561904369U, -1561691323U, -1561478873U, -1561266367U, -1561053881U, -1560842071U, -1560628519U, -1560415321U, -1560203707U, -1559991437U, -1559780639U, -1559568349U, -1559356307U, -1559145017U, -1558935383U, -1558724383U, -1558512313U, -1558300649U, -1558088447U, -1557875689U, -1557664697U, -1557452837U, -1557241417U, -1557027809U, -1556815321U, -1556607361U, -1556394971U, -1556182799U, -1555972007U, -1555757803U, -1555547131U, -1555336427U, -1555123693U, -1554912313U, -1554701053U, -1554488371U, -1554276719U, -1554064399U, -1553854661U, -1553642743U, -1553430247U, -1553219651U, -1553007349U, -1552796459U, -1552584197U, -1552373029U, -1552160453U, -1551947497U, -1551736567U, -1551524531U, -1551312557U, -1551101779U, -1550890007U, -1550680333U, -1550469667U, -1550258377U, -1550048537U, -1549836947U, -1549626413U, -1549413953U, -1549202497U, -1548990721U, -1548777619U, -1548566603U, -1548353953U, -1548143243U, -1547932783U, -1547718707U, -1547508233U, -1547295949U, -1547084933U, -1546874491U, -1546660861U, -1546449799U, -1546240771U, -1546029269U, -1545817543U, -1545608279U, -1545395063U, -1545184891U, -1544973307U, -1544762029U, -1544550919U, -1544340169U, -1544126369U, -1543917269U, -1543704583U, -1543492921U, -1543278167U, -1543066607U, -1542855121U, -1542643969U, -1542432631U, -1542220997U, -1542009797U, -1541798197U, -1541588329U, -1541375651U, -1541164321U, -1540951459U, -1540741079U, -1540529233U, -1540316951U, -1540104407U, -1539892303U, -1539682103U, -1539472589U, -1539260353U, -1539048419U, -1538837119U, -1538625079U, -1538413381U, -1538200369U, -1537988381U, -1537776257U, -1537564159U, -1537351003U, -1537141829U, -1536930599U, -1536719453U, -1536509207U, -1536298567U, -1536084287U, -1535872307U, -1535661467U, -1535448043U, -1535237141U, -1535025673U, -1534813279U, -1534603751U, -1534391513U, -1534179809U, -1533966341U, -1533756793U, -1533546401U, -1533334199U, -1533122693U, -1532910019U, -1532698561U, -1532487683U, -1532274157U, -1532063317U, -1531852901U, -1531640309U, -1531427567U, -1531215589U, -1531002287U, -1530788503U, -1530577127U, -1530366421U, -1530154837U, -1529942443U, -1529731897U, -1529522737U, -1529311841U, -1529103517U, -1528891963U, -1528680841U, -1528467029U, -1528256663U, -1528046269U, -1527835061U, -1527624487U, -1527413753U, -1527202763U, -1526992429U, -1526780881U, -1526568913U, -1526357621U, -1526146381U, -1525935077U, -1525723673U, -1525511483U, -1525301759U, -1525088857U, -1524876253U, -1524665299U, -1524452729U, -1524241639U, -1524031711U, -1523819651U, -1523608943U, -1523397277U, -1523184791U, -1522974181U, -1522761347U, -1522549627U, -1522339421U, -1522130107U, -1521919109U, -1521705557U, -1521496439U, -1521282947U, -1521071219U, -1520860261U, -1520647981U, -1520436857U, -1520224591U, -1520013307U, -1519800533U, -1519589777U, -1519377709U, -1519166063U, -1518957403U, -1518747859U, -1518537569U, -1518326107U, -1518115609U, -1517902261U, -1517689727U, -1517479627U, -1517268097U, -1517056027U, -1516842331U, -1516630799U, -1516422581U, -1516211933U, -1516000391U, -1515788333U, -1515576967U, -1515365569U, -1515154343U, -1514942327U, -1514732293U, -1514522249U, -1514311637U, -1514100949U, -1513888829U, -1513677317U, -1513464419U, -1513253267U, -1513040521U, -1512829321U, -1512619337U, -1512406871U, -1512196163U, -1511984137U, -1511773339U, -1511559821U, -1511349289U, -1511138999U, -1510926353U, -1510713947U, -1510500547U, -1510288337U, -1510077571U, -1509863603U, -1509652121U, -1509441179U, -1509226711U, -1509014431U, -1508801669U, -1508591653U, -1508381621U, -1508170903U, -1507960691U, -1507750679U, -1507539263U, -1507328419U, -1507115851U, -1506903271U, -1506692387U, -1506480763U, -1506267967U, -1506056749U, -1505847173U, -1505635909U, -1505425291U, -1505215927U, -1505005493U, -1504793657U, -1504581619U, -1504371229U, -1504162333U, -1503952867U, -1503740867U, -1503529823U, -1503316649U, -1503105971U, -1502893967U, -1502682551U, -1502471153U, -1502260021U, -1502047271U, -1501834643U, -1501623469U, -1501411771U, -1501200923U, -1500989389U, -1500775873U, -1500565127U, -1500353909U, -1500143621U, -1499932537U, -1499720281U, -1499508971U, -1499297563U, -1499086661U, -1498874747U, -1498663967U, -1498451329U, -1498239949U, -1498028803U, -1497818087U, -1497605653U, -1497394813U, -1497185497U, -1496972819U, -1496762291U, -1496551181U, -1496339959U, -1496130263U, -1495919351U, -1495706561U, -1495496021U, -1495283507U, -1495072847U, -1494862697U, -1494651533U, -1494441001U, -1494230201U, -1494019927U, -1493808817U, -1493596171U, -1493385767U, -1493174381U, -1492964443U, -1492753439U, -1492542301U, -1492331219U, -1492120969U, -1491911543U, -1491699217U, -1491487813U, -1491275839U, -1491064643U, -1490853697U, -1490645441U, -1490435729U, -1490226733U, -1490013949U, -1489802617U, -1489589581U, -1489379527U, -1489166039U, -1488954433U, -1488743299U, -1488531413U, -1488320387U, -1488111187U, -1487900389U, -1487690467U, -1487478497U, -1487267263U, -1487057459U, -1486847729U, -1486637849U, -1486427429U, -1486216819U, -1486003891U, -1485793697U, -1485583139U, -1485372797U, -1485160133U, -1484950217U, -1484741021U, -1484529037U, -1484317111U, -1484106011U, -1483894001U, -1483681889U, -1483471441U, -1483259819U, -1483049713U, -1482838807U, -1482628339U, -1482417641U, -1482206351U, -1481995027U, -1481782711U, -1481570309U, -1481359603U, -1481147693U, -1480933667U, -1480722539U, -1480513499U, -1480303739U, -1480090541U, -1479879637U, -1479668173U, -1479455969U, -1479244651U, -1479032449U, -1478822083U, -1478609551U, -1478399057U, -1478187493U, -1477978231U, -1477768079U, -1477556897U, -1477346933U, -1477136621U, -1476926603U, -1476715193U, -1476506771U, -1476293653U, -1476083051U, -1475872933U, -1475662079U, -1475452523U, -1475242933U, -1475032721U, -1474821919U, -1474611221U, -1474401239U, -1474190131U, -1473977039U, -1473765289U, -1473553997U, -1473340133U, -1473130889U, -1472919583U, -1472708987U, -1472498773U, -1472287043U, -1472077699U, -1471867637U, -1471657441U, -1471446443U, -1471235713U, -1471023823U, -1470812389U, -1470599993U, -1470390283U, -1470178133U, -1469966669U, -1469755801U, -1469543599U, -1469330881U, -1469119987U, -1468907851U, -1468695629U, -1468484929U, -1468273421U, -1468062059U, -1467851149U, -1467640763U, -1467428411U, -1467217327U, -1467006161U, -1466794151U, -1466583073U, -1466371843U, -1466160329U, -1465948373U, -1465736777U, -1465525723U, -1465314119U, -1465102643U, -1464892417U, -1464680897U, -1464467821U, -1464255641U, -1464045809U, -1463835853U, -1463624989U, -1463414549U, -1463204381U, -1462995643U, -1462784161U, -1462573369U, -1462359733U, -1462148579U, -1461938441U, -1461727649U, -1461517399U, -1461304841U, -1461094379U, -1460884471U, -1460673547U, -1460463343U, -1460253167U, -1460041901U, -1459830943U, -1459617227U, -1459408543U, -1459198619U, -1458986429U, -1458775291U, -1458563719U, -1458353033U, -1458142883U, -1457931973U, -1457721589U, -1457511773U, -1457299489U, -1457087893U, -1456876859U, -1456666873U, -1456456499U, -1456244849U, -1456034231U, -1455822019U, -1455611659U, -1455401117U, -1455191977U, -1454981797U, -1454771543U, -1454560109U, -1454349367U, -1454137843U, -1453927427U, -1453715761U, -1453504249U, -1453294127U, -1453081739U, -1452870073U, -1452659729U, -1452448273U, -1452238709U, -1452026141U, -1451813369U, -1451603563U, -1451391889U, -1451180063U, -1450969483U, -1450758469U, -1450547621U, -1450334971U, -1450123639U, -1449913747U, -1449701947U, -1449489913U, -1449279817U, -1449069893U, -1448857687U, -1448648989U, -1448438279U, -1448227537U, -1448017553U, -1447806317U, -1447595869U, -1447382917U, -1447174103U, -1446960607U, -1446749641U, -1446540443U, -1446328439U, -1446119281U, -1445908159U, -1445699449U, -1445489839U, -1445278733U, -1445068367U, -1444856983U, -1444646449U, -1444435033U, -1444222807U, -1444011887U, -1443800339U, -1443587273U, -1443379013U, -1443171043U, -1442957707U, -1442748763U, -1442539339U, -1442327533U, -1442114507U, -1441904047U, -1441690351U, -1441476593U, -1441266361U, -1441055647U, -1440847669U, -1440637277U, -1440426077U, -1440217231U, -1440006509U, -1439794799U, -1439583407U, -1439374171U, -1439162957U, -1438950691U, -1438740437U, -1438528463U, -1438318181U, -1438106513U, -1437895027U, -1437681979U, -1437470873U, -1437259559U, -1437048287U, -1436837653U, -1436626987U, -1436415569U, -1436205919U, -1435995373U, -1435784563U, -1435572799U, -1435360867U, -1435150831U, -1434940153U, -1434729199U, -1434520643U, -1434309757U, -1434099409U, -1433886089U, -1433674607U, -1433466031U, -1433253691U, -1433041403U, -1432829141U, -1432619269U, -1432407803U, -1432197869U, -1431984497U, -1431775249U, -1431565097U, -1431356779U, -1431143009U, -1430932183U, -1430722303U, -1430512469U, -1430300119U, -1430090093U, -1429879069U, -1429668403U, -1429460267U, -1429249499U, -1429038931U, -1428829397U, -1428618013U, -1428406739U, -1428195491U, -1427984963U, -1427775317U, -1427565439U, -1427352851U, -1427142841U, -1426932539U, -1426720049U, -1426508137U, -1426295809U, -1426083629U, -1425873301U, -1425663559U, -1425453457U, -1425242501U, -1425033223U, -1424823151U, -1424609591U, -1424398769U, -1424186873U, -1423976707U, -1423764707U, -1423554833U, -1423345877U, -1423133431U, -1422924851U, -1422714019U, -1422502589U, -1422290981U, -1422080969U, -1421869187U, -1421659849U, -1421447683U, -1421235259U, -1421022943U, -1420814009U, -1420605029U, -1420395637U, -1420184053U, -1419971947U, -1419759763U, -1419551207U, -1419341041U, -1419129991U, -1418921551U, -1418709581U, -1418500289U, -1418290387U, -1418078429U, -1417870807U, -1417660261U, -1417450193U, -1417239283U, -1417028629U, -1416816109U, -1416605381U, -1416393973U, -1416184151U, -1415974367U, -1415759791U, -1415548481U, -1415338993U, -1415127737U, -1414916513U, -1414706081U, -1414496683U, -1414285841U, -1414075933U, -1413865723U, -1413655609U, -1413443107U, -1413233803U, -1413023639U, -1412815031U, -1412603749U, -1412393903U, -1412182423U, -1411972363U, -1411758683U, -1411549081U, -1411338163U, -1411128419U, -1410915481U, -1410704203U, -1410493127U, -1410282767U, -1410072823U, -1409859751U, -1409648803U, -1409438881U, -1409228333U, -1409018059U, -1408806713U, -1408597321U, -1408386337U, -1408174433U, -1407966977U, -1407755081U, -1407545411U, -1407331943U, -1407121483U, -1406910187U, -1406702161U, -1406491811U, -1406281687U, -1406072201U, -1405861619U, -1405649281U, -1405438123U, -1405227907U, -1405017281U, -1404804259U, -1404592459U, -1404382807U, -1404170093U, -1403960413U, -1403749219U, -1403539117U, -1403328253U, -1403117977U, -1402907347U, -1402696543U, -1402487101U, -1402274179U, -1402063451U, -1401852989U, -1401641771U, -1401431819U, -1401220687U, -1401008503U, -1400799527U, -1400586883U, -1400375531U, -1400164691U, -1399955521U, -1399745411U, -1399536209U, -1399323823U, -1399113361U, -1398902599U, -1398693211U, -1398480011U, -1398271157U, -1398059851U, -1397849273U, -1397638597U, -1397427527U, -1397219311U, -1397008007U, -1396796321U, -1396584877U, -1396373389U, -1396163933U, -1395953003U, -1395742811U, -1395532583U, -1395320299U, -1395110599U, -1394900411U, -1394691731U, -1394481623U, -1394269621U, -1394061323U, -1393848473U, -1393637447U, -1393427027U, -1393216597U, -1393005013U, -1392793447U, -1392582857U, -1392373667U, -1392162097U, -1391951017U, -1391739917U, -1391531941U, -1391323799U, -1391112179U, -1390903231U, -1390693357U, -1390480867U, -1390273177U, -1390061591U, -1389854443U, -1389644899U, -1389435529U, -1389224101U, -1389013657U, -1388802889U, -1388590771U, -1388379371U, -1388168759U, -1387959973U, -1387749851U, -1387538531U, -1387326557U, -1387115207U, -1386903257U, -1386690259U, -1386480191U, -1386269273U, -1386059749U, -1385850449U, -1385640629U, -1385426899U, -1385217611U, -1385009077U, -1384797541U, -1384587221U, -1384376911U, -1384166219U, -1383955427U, -1383743587U, -1383531871U, -1383321073U, -1383109709U, -1382900023U, -1382688089U, -1382478193U, -1382270801U, -1382059321U, -1381850683U, -1381640213U, -1381429349U, -1381218071U, -1381008397U, -1380799099U, -1380588893U, -1380376549U, -1380165037U, -1379956027U, -1379745391U, -1379534699U, -1379324861U, -1379115107U, -1378903499U, -1378695559U, -1378484147U, -1378274273U, -1378062869U, -1377849181U, -1377638539U, -1377427537U, -1377217271U, -1377005527U, -1376795093U, -1376583451U, -1376372927U, -1376163917U, -1375954799U, -1375744219U, -1375533587U, -1375323067U, -1375111141U, -1374901441U, -1374690479U, -1374476767U, -1374266947U, -1374055327U, -1373845763U, -1373635849U, -1373424677U, -1373214013U, -1373002481U, -1372792661U, -1372582951U, -1372371989U, -1372160681U, -1371951631U, -1371740347U, -1371530051U, -1371317737U, -1371107293U, -1370898161U, -1370689351U, -1370478199U, -1370269447U, -1370059211U, -1369848439U, -1369638217U, -1369428089U, -1369216799U, -1369007459U, -1368795163U, -1368583901U, -1368373793U, -1368162869U, -1367952449U, -1367742331U, -1367532007U, -1367321981U, -1367114009U, -1366899931U, -1366690271U, -1366478059U, -1366267829U, -1366055539U, -1365846239U, -1365637037U, -1365426473U, -1365217783U, -1365005639U, -1364797337U, -1364586019U, -1364374621U, -1364163901U, -1363954373U, -1363745497U, -1363535959U, -1363324243U, -1363115399U, -1362903431U, -1362693061U, -1362483347U, -1362272159U, -1362061843U, -1361852521U, -1361642413U, -1361433547U, -1361222483U, -1361011681U, -1360802489U, -1360590611U, -1360380881U, -1360171817U, -1359961501U, -1359749983U, -1359539257U, -1359328409U, -1359117871U, -1358908721U, -1358698249U, -1358486093U, -1358278799U, -1358066891U, -1357857821U, -1357647553U, -1357437911U, -1357226729U, -1357017223U, -1356807173U, -1356596411U, -1356385637U, -1356176741U, -1355964263U, -1355755039U, -1355545183U, -1355336251U, -1355128459U, -1354919273U, -1354708483U, -1354498751U, -1354287721U, -1354078309U, -1353870257U, -1353661961U, -1353449791U, -1353240853U, -1353029723U, -1352821361U, -1352612003U, -1352403421U, -1352193341U, -1351982417U, -1351771667U, -1351559323U, -1351347821U, -1351136029U, -1350925787U, -1350716659U, -1350507239U, -1350298679U, -1350086779U, -1349874391U, -1349663261U, -1349453851U, -1349244133U, -1349031391U, -1348822213U, -1348612427U, -1348402843U, -1348194559U, -1347983867U, -1347773291U, -1347559459U, -1347350909U, -1347141193U, -1346933207U, -1346723429U, -1346514991U, -1346305277U, -1346093471U, -1345883647U, -1345672399U, -1345461539U, -1345252241U, -1345040321U, -1344829741U, -1344618323U, -1344407489U, -1344196753U, -1343988967U, -1343780203U, -1343568277U, -1343355241U, -1343147083U, -1342937987U, -1342728071U, -1342517987U, -1342307893U, -1342097557U, -1341887003U, -1341675697U, -1341468683U, -1341261511U, -1341050771U, -1340841889U, -1340632757U, -1340423269U, -1340211359U, -1340001323U, -1339791269U, -1339578307U, -1339367231U, -1339154987U, -1338943393U, -1338732971U, -1338525077U, -1338315793U, -1338103777U, -1337891767U, -1337684981U, -1337475847U, -1337265647U, -1337056157U, -1336846079U, -1336636783U, -1336427837U, -1336218349U, -1336009819U, -1335798707U, -1335587749U, -1335378673U, -1335167833U, -1334957387U, -1334748409U, -1334537419U, -1334327461U, -1334118859U, -1333910269U, -1333701917U, -1333489019U, -1333276801U, -1333068907U, -1332859907U, -1332650933U, -1332443591U, -1332235007U, -1332026453U, -1331816303U, -1331608273U, -1331395193U, -1331182871U, -1330972241U, -1330765867U, -1330554023U, -1330343453U, -1330131511U, -1329919051U, -1329708893U, -1329498817U, -1329287497U, -1329079417U, -1328868181U, -1328658781U, -1328450027U, -1328240899U, -1328029309U, -1327816559U, -1327606783U, -1327398283U, -1327186691U, -1326977819U, -1326767693U, -1326556859U, -1326346837U, -1326137347U, -1325926681U, -1325717227U, -1325506499U, -1325296927U, -1325087851U, -1324877819U, -1324667611U, -1324459139U, -1324247699U, -1324035077U, -1323826727U, -1323617293U, -1323406849U, -1323194489U, -1322982083U, -1322772643U, -1322561957U, -1322351603U, -1322140619U, -1321930747U, -1321720937U, -1321512457U, -1321303331U, -1321092109U, -1320882851U, -1320674917U, -1320465659U, -1320254339U, -1320043337U, -1319834357U, -1319625709U, -1319414983U, -1319203747U, -1318993883U, -1318785301U, -1318577279U, -1318366037U, -1318152007U, -1317943181U, -1317732791U, -1317523841U, -1317314303U, -1317103897U, -1316895257U, -1316685211U, -1316474221U, -1316265331U, -1316054891U, -1315843693U, -1315632137U, -1315421413U, -1315208959U, -1314999743U, -1314788777U, -1314578333U, -1314370261U, -1314159463U, -1313949479U, -1313740369U, -1313531839U, -1313319703U, -1313108959U, -1312898203U, -1312688057U, -1312479703U, -1312267717U, -1312058303U, -1311847529U, -1311637417U, -1311426583U, -1311215863U, -1311006553U, -1310797487U, -1310588473U, -1310377987U, -1310168747U, -1309958267U, -1309749391U, -1309539499U, -1309329479U, -1309120567U, -1308910397U, -1308700637U, -1308490721U, -1308281453U, -1308072991U, -1307865961U, -1307656717U, -1307445779U, -1307237363U, -1307026261U, -1306817159U, -1306605631U, -1306395403U, -1306185103U, -1305975263U, -1305767531U, -1305558109U, -1305348797U, -1305139603U, -1304929123U, -1304720051U, -1304511617U, -1304300269U, -1304090467U, -1303881353U, -1303671079U, -1303459217U, -1303250287U, -1303040521U, -1302831029U, -1302621143U, -1302409819U, -1302198973U, -1301989541U, -1301779541U, -1301570293U, -1301362219U, -1301151557U, -1300942213U, -1300732399U, -1300522403U, -1300313351U, -1300106153U, -1299895273U, -1299682561U, -1299472831U, -1299264649U, -1299053519U, -1298843407U, -1298634643U, -1298425393U, -1298213723U, -1298005127U, -1297796261U, -1297585661U, -1297373851U, -1297163779U, -1296953461U, -1296743507U, -1296533111U, -1296323929U, -1296112973U, -1295901839U, -1295691101U, -1295482039U, -1295272897U, -1295060023U, -1294851017U, -1294641659U, -1294429363U, -1294219313U, -1294009729U, -1293800581U, -1293592733U, -1293382037U, -1293171641U, -1292958059U, -1292746541U, -1292537063U, -1292325929U, -1292117027U, -1291908257U, -1291699309U, -1291488907U, -1291281083U, -1291071497U, -1290862493U, -1290651811U, -1290443393U, -1290234571U, -1290025021U, -1289815477U, -1289604307U, -1289395417U, -1289184679U, -1288975997U, -1288766833U, -1288556921U, -1288348429U, -1288138339U, -1287928099U, -1287718339U, -1287505741U, -1287295949U, -1287085523U, -1286875927U, -1286667689U, -1286457461U, -1286249161U, -1286040269U, -1285833047U, -1285623533U, -1285412059U, -1285202393U, -1284992759U, -1284780683U, -1284571111U, -1284360967U, -1284151301U, -1283940841U, -1283732231U, -1283522021U, -1283313019U, -1283104279U, -1282895363U, -1282682057U, -1282472407U, -1282264663U, -1282053103U, -1281842747U, -1281633181U, -1281423527U, -1281213191U, -1281003403U, -1280793589U, -1280583313U, -1280372719U, -1280164439U, -1279955377U, -1279745221U, -1279534447U, -1279326287U, -1279117223U, -1278905813U, -1278698909U, -1278491231U, -1278280687U, -1278070979U, -1277860873U, -1277650267U, -1277440727U, -1277231077U, -1277022427U, -1276813621U, -1276603609U, -1276392329U, -1276182547U, -1275971579U, -1275761801U, -1275553781U, -1275343483U, -1275133991U, -1274922373U, -1274710727U, -1274501663U, -1274294531U, -1274083753U, -1273875037U, -1273665233U, -1273455991U, -1273245527U, -1273035679U, -1272825977U, -1272615397U, -1272407239U, -1272197977U, -1271987671U, -1271776811U, -1271566627U, -1271355739U, -1271148253U, -1270937953U, -1270728527U, -1270517849U, -1270308241U, -1270098527U, -1269886873U, -1269680053U, -1269470837U, -1269262321U, -1269054197U, -1268844481U, -1268635651U, -1268427047U, -1268216891U, -1268006891U, -1267800031U, -1267590887U, -1267381691U, -1267170791U, -1266961207U, -1266754579U, -1266546143U, -1266337901U, -1266129401U, -1265918683U, -1265706697U, -1265496943U, -1265288159U, -1265077771U, -1264869971U, -1264660013U, -1264449523U, -1264238123U, -1264029539U, -1263820993U, -1263611597U, -1263400771U, -1263193111U, -1262981519U, -1262772097U, -1262563301U, -1262354279U, -1262142769U, -1261934431U, -1261723741U, -1261515029U, -1261306933U, -1261099303U, -1260888019U, -1260676409U, -1260468359U, -1260257827U, -1260050257U, -1259839093U, -1259629243U, -1259419391U, -1259210399U, -1259001217U, -1258793857U, -1258585037U, -1258375523U, -1258165679U, -1257955429U, -1257744953U, -1257534881U, -1257325829U, -1257116669U, -1256905073U, -1256695789U, -1256486117U, -1256277961U, -1256067493U, -1255856647U, -1255647719U, -1255437529U, -1255225837U, -1255015369U, -1254806131U, -1254595753U, -1254386789U, -1254178421U, -1253968913U, -1253758447U, -1253548619U, -1253338423U, -1253130479U, -1252923073U, -1252715501U, -1252508093U, -1252297457U, -1252086653U, -1251874859U, -1251664657U, -1251453971U, -1251246587U, -1251037709U, -1250828521U, -1250619481U, -1250410003U, -1250200339U, -1249992089U, -1249782367U, -1249573147U, -1249364279U, -1249156483U, -1248948131U, -1248738089U, -1248528599U, -1248319139U, -1248109439U, -1247902109U, -1247692639U, -1247481349U, -1247271547U, -1247063087U, -1246854223U, -1246645307U, -1246435901U, -1246227581U, -1246018871U, -1245810227U, -1245601571U, -1245392903U, -1245184243U, -1244973703U, -1244765047U, -1244557333U, -1244346863U, -1244135653U, -1243927999U, -1243717823U, -1243509257U, -1243298579U, -1243088681U, -1242879059U, -1242671167U, -1242460357U, -1242246671U, -1242039277U, -1241829913U, -1241620693U, -1241410673U, -1241202409U, -1240991117U, -1240782497U, -1240572649U, -1240363273U, -1240153777U, -1239943217U, -1239734767U, -1239525311U, -1239313181U, -1239103571U, -1238893823U, -1238684219U, -1238472803U, -1238262409U, -1238054203U, -1237844537U, -1237634821U, -1237427551U, -1237217627U, -1237009793U, -1236798539U, -1236589789U, -1236381481U, -1236172387U, -1235964097U, -1235754187U, -1235545853U, -1235335271U, -1235126447U, -1234917487U, -1234708621U, -1234500199U, -1234289923U, -1234080811U, -1233871147U, -1233660019U, -1233451543U, -1233242953U, -1233033727U, -1232823541U, -1232613331U, -1232402621U, -1232193211U, -1231982483U, -1231772611U, -1231562147U, -1231353373U, -1231146467U, -1230937441U, -1230727991U, -1230517793U, -1230311371U, -1230102737U, -1229895523U, -1229684839U, -1229476231U, -1229268809U, -1229059703U, -1228850041U, -1228638493U, -1228429607U, -1228220797U, -1228011221U, -1227800507U, -1227590239U, -1227381409U, -1227172223U, -1226964671U, -1226753419U, -1226542657U, -1226332829U, -1226122453U, -1225911629U, -1225702547U, -1225493051U, -1225282477U, -1225072763U, -1224862213U, -1224653371U, -1224442993U, -1224234727U, -1224025021U, -1223816687U, -1223607443U, -1223398019U, -1223187829U, -1222978951U, -1222770077U, -1222560371U, -1222351069U, -1222142459U, -1221933131U, -1221721819U, -1221514477U, -1221302977U, -1221094829U, -1220885647U, -1220675699U, -1220464283U, -1220254433U, -1220047229U, -1219838999U, -1219629767U, -1219421089U, -1219213297U, -1219005551U, -1218797189U, -1218587507U, -1218377591U, -1218168283U, -1217959759U, -1217750113U, -1217539289U, -1217329511U, -1217123249U, -1216913377U, -1216703687U, -1216494469U, -1216286101U, -1216077211U, -1215867539U, -1215660739U, -1215451949U, -1215241673U, -1215031777U, -1214822281U, -1214612899U, -1214402617U, -1214193439U, -1213983487U, -1213775221U, -1213567811U, -1213358513U, -1213147499U, -1212936583U, -1212727433U, -1212520013U, -1212311081U, -1212103577U, -1211893097U, -1211685161U, -1211473667U, -1211264987U, -1211058197U, -1210849229U, -1210639567U, -1210431389U, -1210221599U, -1210011203U, -1209802301U, -1209594917U, -1209386179U, -1209175673U, -1208967143U, -1208757743U, -1208547889U, -1208338451U, -1208131159U, -1207920361U, -1207710793U, -1207501777U, -1207294171U, -1207084621U, -1206876179U, -1206669041U, -1206459521U, -1206249859U, -1206041953U, -1205831299U, -1205622923U, -1205415979U, -1205207389U, -1204998191U, -1204787341U, -1204578779U, -1204371323U, -1204162783U, -1203951167U, -1203740099U, -1203532607U, -1203322357U, -1203111703U, -1202902793U, -1202693599U, -1202485397U, -1202275051U, -1202065471U, -1201854851U, -1201645231U, -1201434701U, -1201227581U, -1201018723U, -1200811463U, -1200602569U, -1200391783U, -1200182749U, -1199970719U, -1199762611U, -1199552531U, -1199343581U, -1199132707U, -1198924267U, -1198714327U, -1198506821U, -1198298653U, -1198090477U, -1197882457U, -1197674893U, -1197466163U, -1197256231U, -1197048563U, -1196838133U, -1196629429U, -1196420011U, -1196211407U, -1196001601U, -1195792771U, -1195585481U, -1195374319U, -1195164823U, -1194956393U, -1194748517U, -1194540509U, -1194329251U, -1194120047U, -1193911993U, -1193703031U, -1193491619U, -1193283407U, -1193075309U, -1192865567U, -1192657183U, -1192448381U, -1192240703U, -1192030831U, -1191823163U, -1191612913U, -1191402739U, -1191193649U, -1190984173U, -1190775451U, -1190564161U, -1190355941U, -1190148107U, -1189939213U, -1189728121U, -1189519997U, -1189311247U, -1189101713U, -1188892717U, -1188685703U, -1188475777U, -1188268001U, -1188058351U, -1187849153U, -1187640917U, -1187433263U, -1187226367U, -1187015953U, -1186805089U, -1186596007U, -1186388261U, -1186178297U, -1185970603U, -1185761939U, -1185550823U, -1185341567U, -1185133997U, -1184923501U, -1184713903U, -1184506039U, -1184297089U, -1184087273U, -1183878329U, -1183669787U, -1183458817U, -1183250791U, -1183041817U, -1182832331U, -1182623809U, -1182414503U, -1182205709U, -1181997067U, -1181787179U, -1181577517U, -1181368277U, -1181158673U, -1180949249U, -1180738123U, -1180528859U, -1180320989U, -1180111057U, -1179901351U, -1179692753U, -1179482891U, -1179277469U, -1179068017U, -1178859497U, -1178650687U, -1178442443U, -1178232611U, -1178021371U, -1177811227U, -1177601077U, -1177390987U, -1177182557U, -1176975281U, -1176766693U, -1176558433U, -1176348211U, -1176142267U, -1175934349U, -1175724499U, -1175516383U, -1175305661U, -1175096981U, -1174887067U, -1174678643U, -1174471559U, -1174261367U, -1174052647U, -1173844219U, -1173636703U, -1173426931U, -1173217663U, -1173009319U, -1172799917U, -1172590231U, -1172381857U, -1172174807U, -1171965953U, -1171758163U, -1171550299U, -1171342357U, -1171133347U, -1170923531U, -1170715573U, -1170506611U, -1170297743U, -1170087619U, -1169879033U, -1169673629U, -1169464913U, -1169253593U, -1169046509U, -1168837333U, -1168628623U, -1168419073U, -1168211003U, -1168001629U, -1167792499U, -1167582679U, -1167374083U, -1167164641U, -1166955613U, -1166747363U, -1166538743U, -1166330059U, -1166119189U, -1165910633U, -1165703027U, -1165492703U, -1165285949U, -1165078643U, -1164868769U, -1164659869U, -1164451963U, -1164242549U, -1164034369U, -1163827999U, -1163620747U, -1163411423U, -1163203091U, -1162992989U, -1162784431U, -1162574671U, -1162365587U, -1162159013U, -1161950299U, -1161741389U, -1161533117U, -1161327229U, -1161119857U, -1160911247U, -1160702561U, -1160493413U, -1160284217U, -1160074693U, -1159865429U, -1159657883U, -1159447573U, -1159238293U, -1159029413U, -1158821291U, -1158610679U, -1158401791U, -1158192437U, -1157983051U, -1157773979U, -1157566313U, -1157356867U, -1157148761U, -1156940111U, -1156732697U, -1156522207U, -1156314457U, -1156105541U, -1155900293U, -1155689329U, -1155480661U, -1155273419U, -1155064697U, -1154855899U, -1154646653U, -1154436793U, -1154228027U, -1154020729U, -1153810711U, -1153603991U, -1153394663U, -1153187417U, -1152978973U, -1152771073U, -1152563249U, -1152353821U, -1152145993U, -1151938247U, -1151730473U, -1151522587U, -1151315437U, -1151105951U, -1150895927U, -1150688501U, -1150477577U, -1150271407U, -1150063381U, -1149855211U, -1149644887U, -1149437147U, -1149227243U, -1149020567U, -1148810137U, -1148600951U, -1148394769U, -1148185991U, -1147977247U, -1147768847U, -1147562491U, -1147353859U, -1147143593U, -1146933899U, -1146724949U, -1146514861U, -1146306919U, -1146100591U, -1145894003U, -1145683807U, -1145478899U, -1145271119U, -1145060519U, -1144849163U, -1144640489U, -1144431487U, -1144221607U, -1144014493U, -1143805609U, -1143596227U, -1143388151U, -1143178501U, -1142967641U, -1142757263U, -1142548973U, -1142340253U, -1142130797U, -1141922099U, -1141712267U, -1141504339U, -1141295399U, -1141085873U, -1140875789U, -1140666523U, -1140455947U, -1140247531U, -1140040739U, -1139831323U, -1139624011U, -1139414651U, -1139205901U, -1138998829U, -1138789373U, -1138581187U, -1138373713U, -1138165307U, -1137956741U, -1137749777U, -1137543557U, -1137334369U, -1137125887U, -1136915501U, -1136704747U, -1136495683U, -1136285251U, -1136077577U, -1135868191U, -1135660817U, -1135452361U, -1135244809U, -1135035169U, -1134824861U, -1134615437U, -1134406519U, -1134197663U, -1133988629U, -1133778851U, -1133568727U, -1133357807U, -1133149687U, -1132940047U, -1132731473U, -1132524047U, -1132317119U, -1132109567U, -1131901469U, -1131692797U, -1131482159U, -1131273667U, -1131064631U, -1130857417U, -1130648083U, -1130439929U, -1130231803U, -1130021449U, -1129813459U, -1129605619U, -1129394641U, -1129186661U, -1128976669U, -1128768803U, -1128560591U, -1128354179U, -1128145127U, -1127938793U, -1127729279U, -1127520491U, -1127310199U, -1127101757U, -1126891127U, -1126683491U, -1126474469U, -1126268371U, -1126060379U, -1125850861U, -1125645503U, -1125435653U, -1125228911U, -1125019937U, -1124810191U, -1124601029U, -1124391427U, -1124181301U, -1123972217U, -1123763177U, -1123553309U, -1123346023U, -1123136743U, -1122928627U, -1122720967U, -1122511417U, -1122302417U, -1122093737U, -1121887787U, -1121678477U, -1121468987U, -1121263597U, -1121054999U, -1120848263U, -1120639991U, -1120430299U, -1120221979U, -1120012321U, -1119805361U, -1119597139U, -1119388597U, -1119178637U, -1118973001U, -1118764489U, -1118557243U, -1118348449U, -1118141587U, -1117932931U, -1117724207U, -1117513043U, -1117305067U, -1117096891U, -1116887111U, -1116679621U, -1116471449U, -1116262709U, -1116055631U, -1115846243U, -1115635361U, -1115427913U, -1115219251U, -1115012053U, -1114803533U, -1114593659U, -1114385507U, -1114178473U, -1113968143U, -1113762623U, -1113553663U, -1113347029U, -1113138293U, -1112928077U, -1112717911U, -1112509877U, -1112301271U, -1112092691U, -1111885717U, -1111677641U, -1111467271U, -1111260041U, -1111051927U, -1110844181U, -1110635249U, -1110426409U, -1110217847U, -1110008941U, -1109801263U, -1109592233U, -1109383721U, -1109176469U, -1108968821U, -1108760137U, -1108551179U, -1108344191U, -1108137031U, -1107929003U, -1107720883U, -1107514039U, -1107305911U, -1107098303U, -1106892403U, -1106683751U, -1106474197U, -1106265071U, -1106056043U, -1105847839U, -1105639783U, -1105429693U, -1105221853U, -1105013123U, -1104804509U, -1104595663U, -1104387239U, -1104180157U, -1103972567U, -1103765197U, -1103556331U, -1103348461U, -1103142101U, -1102933277U, -1102726543U, -1102519267U, -1102313431U, -1102104473U, -1101895429U, -1101685861U, -1101479651U, -1101268541U, -1101060229U, -1100852899U, -1100645999U, -1100436301U, -1100227207U, -1100018219U, -1099811047U, -1099602997U, -1099393643U, -1099185673U, -1098978599U, -1098770263U, -1098561227U, -1098351797U, -1098144017U, -1097937167U, -1097728157U, -1097520947U, -1097312089U, -1097103767U, -1096897601U, -1096689799U, -1096482011U, -1096274651U, -1096066739U, -1095859199U, -1095650089U, -1095442963U, -1095231623U, -1095024257U, -1094816797U, -1094609557U, -1094398931U, -1094189693U, -1093980971U, -1093770611U, -1093563649U, -1093358719U, -1093150999U, -1092943727U, -1092736243U, -1092527509U, -1092318377U, -1092112319U, -1091904797U, -1091696719U, -1091489419U, -1091281019U, -1091072471U, -1090864699U, -1090656817U, -1090447843U, -1090240531U, -1090031741U, -1089824773U, -1089618017U, -1089409109U, -1089200053U, -1088991263U, -1088783723U, -1088576893U, -1088365753U, -1088157073U, -1087948157U, -1087740917U, -1087532689U, -1087324613U, -1087118537U, -1086911729U, -1086703643U, -1086495727U, -1086288169U, -1086080651U, -1085870603U, -1085664887U, -1085456423U, -1085247697U, -1085038519U, -1084833017U, -1084624049U, -1084416631U, -1084208351U, -1084001693U, -1083793349U, -1083585871U, -1083377047U, -1083170471U, -1082963663U, -1082756149U, -1082546651U, -1082338427U, -1082131829U, -1081924471U, -1081716761U, -1081511393U, -1081303913U, -1081096957U, -1080887629U, -1080678889U, -1080469007U, -1080262063U, -1080055027U, -1079847971U, -1079640707U, -1079432869U, -1079223599U, -1079014879U, -1078808681U, -1078599227U, -1078390589U, -1078182643U, -1077975377U, -1077768583U, -1077558403U, -1077350501U, -1077143029U, -1076934251U, -1076724241U, -1076518097U, -1076309501U, -1076101567U, -1075893557U, -1075684787U, -1075475461U, -1075267649U, -1075058701U, -1074849661U, -1074641677U, -1074432679U, -1074225577U, -1074019853U, -1073811041U, -1073601887U, -1073392231U, -1073184083U, -1072976483U, -1072767901U, -1072560497U, -1072351633U, -1072144147U, -1071935113U, -1071728831U, -1071520193U, -1071314423U, -1071105181U, -1070897921U, -1070692321U, -1070484431U, -1070277881U, -1070069713U, -1069861379U, -1069652459U, -1069443377U, -1069236671U, -1069029323U, -1068821141U, -1068613543U, -1068406421U, -1068198277U, -1067990419U, -1067782787U, -1067575109U, -1067369003U, -1067160917U, -1066953301U, -1066746419U, -1066536941U, -1066330519U, -1066124239U, -1065916381U, -1065710047U, -1065502043U, -1065293909U, -1065085093U, -1064875531U, -1064669233U, -1064464769U, -1064256913U, -1064052889U, -1063841941U, -1063634183U, -1063429519U, -1063220489U, -1063011779U, -1062803279U, -1062594389U, -1062385393U, -1062178993U, -1061971153U, -1061765231U, -1061557109U, -1061348021U, -1061139697U, -1060931147U, -1060724087U, -1060514333U, -1060306607U, -1060098943U, -1059890033U, -1059683543U, -1059476063U, -1059268699U, -1059058799U, -1058851631U, -1058644291U, -1058437243U, -1058228651U, -1058022887U, -1057815553U, -1057607189U, -1057398107U, -1057191097U, -1056981413U, -1056774827U, -1056567443U, -1056358829U, -1056150707U, -1055942477U, -1055735311U, -1055524109U, -1055317657U, -1055108851U, -1054899821U, -1054691531U, -1054482683U, -1054276051U, -1054070753U, -1053861643U, -1053652829U, -1053443057U, -1053235811U, -1053029443U, -1052820511U, -1052613781U, -1052407277U, -1052201207U, -1051991939U, -1051782857U, -1051575347U, -1051368133U, -1051161451U, -1050953941U, -1050747079U, -1050538583U, -1050331537U, -1050123911U, -1049915177U, -1049708141U, -1049499391U, -1049291899U, -1049084801U, -1048875713U, -1048666351U, -1048459133U, -1048250167U, -1048043951U, -1047834761U, -1047627271U, -1047418517U, -1047210709U, -1047002123U, -1046793551U, -1046584937U, -1046377229U, -1046170379U, -1045963277U, -1045755479U, -1045548289U, -1045341391U, -1045131757U, -1044923059U, -1044714707U, -1044506663U, -1044299353U, -1044089779U, -1043881469U, -1043675887U, -1043468333U, -1043259947U, -1043052079U, -1042842733U, -1042636327U, -1042430009U, -1042222837U, -1042014559U, -1041806749U, -1041601129U, -1041395071U, -1041186929U, -1040977403U, -1040770943U, -1040561549U, -1040352769U, -1040148119U, -1039940617U, -1039734901U, -1039527631U, -1039319389U, -1039112171U, -1038904313U, -1038697459U, -1038489227U, -1038281971U, -1038076063U, -1037869297U, -1037660693U, -1037454337U, -1037245081U, -1037036801U, -1036830203U, -1036622537U, -1036418689U, -1036209221U, -1036001821U, -1035793637U, -1035585337U, -1035377579U, -1035169859U, -1034963477U, -1034755889U, -1034547919U, -1034339519U, -1034133439U, -1033926133U, -1033718393U, -1033508219U, -1033301741U, -1033093891U, -1032883727U, -1032675671U, -1032468491U, -1032261277U, -1032053389U, -1031846441U, -1031638939U, -1031432029U, -1031222191U, -1031015443U, -1030807237U, -1030602227U, -1030394653U, -1030187299U, -1029978863U, -1029770507U, -1029562477U, -1029356557U, -1029149479U, -1028943049U, -1028736311U, -1028526439U, -1028322089U, -1028114587U, -1027905079U, -1027698571U, -1027491097U, -1027281383U, -1027072499U, -1026864593U, -1026655111U, -1026449509U, -1026242017U, -1026034411U, -1025827493U, -1025619773U, -1025412833U, -1025205917U, -1024998553U, -1024790993U, -1024585409U, -1024377589U, -1024170479U, -1023963079U, -1023754891U, -1023546973U, -1023340459U, -1023130879U, -1022924689U, -1022717417U, -1022509559U, -1022303539U, -1022093477U, -1021885679U, -1021678703U, -1021470403U, -1021262609U, -1021056017U, -1020847343U, -1020639803U, -1020432683U, -1020225047U, -1020020171U, -1019812693U, -1019606831U, -1019398117U, -1019190233U, -1018982821U, -1018775161U, -1018567057U, -1018358507U, -1018151209U, -1017944381U, -1017736241U, -1017530897U, -1017324137U, -1017116063U, -1016908021U, -1016700959U, -1016493871U, -1016286463U, -1016078939U, -1015870729U, -1015663459U, -1015456751U, -1015249799U, -1015043849U, -1014837041U, -1014630109U, -1014424841U, -1014216271U, -1014010013U, -1013804111U, -1013594851U, -1013387113U, -1013179397U, -1012969481U, -1012763077U, -1012555567U, -1012347803U, -1012140301U, -1011933803U, -1011728813U, -1011522041U, -1011312689U, -1011105943U, -1010899103U, -1010691037U, -1010484037U, -1010277799U, -1010068273U, -1009863587U, -1009654741U, -1009449401U, -1009242103U, -1009035059U, -1008826657U, -1008617111U, -1008409531U, -1008202501U, -1007995843U, -1007786251U, -1007579669U, -1007371847U, -1007167529U, -1006961783U, -1006755119U, -1006546817U, -1006337861U, -1006130189U, -1005921529U, -1005714239U, -1005508093U, -1005301811U, -1005096139U, -1004888011U, -1004681233U, -1004475079U, -1004267977U, -1004061257U, -1003852589U, -1003647949U, -1003439069U, -1003232161U, -1003024067U, -1002817859U, -1002610171U, -1002403361U, -1002194651U, -1001986877U, -1001778803U, -1001571667U, -1001364493U, -1001156677U, -1000951957U, -1000744669U, -1000537129U, -1000327297U, -1000119983U, -999912523U, -999703801U, -999493673U, -999286423U, -999078749U, -998871407U, -998664533U, -998458471U, -998253203U, -998046109U, -997839767U, -997633313U, -997426693U, -997218899U, -997011133U, -996803813U, -996597577U, -996390223U, -996183359U, -995977547U, -995770397U, -995562409U, -995354803U, -995146829U, -994941529U, -994735051U, -994527539U, -994320137U, -994113697U, -993907393U, -993698323U, -993491119U, -993282299U, -993076549U, -992870051U, -992663029U, -992455333U, -992248849U, -992042297U, -991833253U, -991624423U, -991417409U, -991211311U, -991005881U, -990798979U, -990592243U, -990385157U, -990176959U, -989971237U, -989762567U, -989556467U, -989348963U, -989142277U, -988934563U, -988729121U, -988519901U, -988313663U, -988104911U, -987897461U, -987692201U, -987484747U, -987276473U, -987069637U, -986861357U, -986656057U, -986450291U, -986242583U, -986034559U, -985828897U, -985620491U, -985413613U, -985208027U, -984999641U, -984793639U, -984586049U, -984379723U, -984171319U, -983966077U, -983761687U, -983554151U, -983347199U, -983139727U, -982933051U, -982728209U, -982520449U, -982314679U, -982108307U, -981899161U, -981692263U, -981484789U, -981277889U, -981072341U, -980865359U, -980657081U, -980449601U, -980242871U, -980035361U, -979828741U, -979620721U, -979413271U, -979206149U, -979000333U, -978793337U, -978582823U, -978378091U, -978170003U, -977962343U, -977755951U, -977548213U, -977341201U, -977134861U, -976928089U, -976721873U, -976515613U, -976308323U, -976101821U, -975892903U, -975685771U, -975477911U, -975270103U, -975063059U, -974856133U, -974650109U, -974441773U, -974234951U, -974027363U, -973819969U, -973612897U, -973407217U, -973200797U, -972991693U, -972783767U, -972575189U, -972370271U, -972161327U, -971955211U, -971747593U, -971541997U, -971334241U, -971126231U, -970917953U, -970712653U, -970504793U, -970298893U, -970093193U, -969885979U, -969678383U, -969471989U, -969264253U, -969059699U, -968852399U, -968645647U, -968438519U, -968231983U, -968024059U, -967817281U, -967613329U, -967406161U, -967197743U, -966990467U, -966783197U, -966577459U, -966369473U, -966164629U, -965956177U, -965746939U, -965540179U, -965333641U, -965127589U, -964920427U, -964712663U, -964505779U, -964297351U, -964090601U, -963884557U, -963679721U, -963472667U, -963264233U, -963057677U, -962851469U, -962644237U, -962439397U, -962233927U, -962026067U, -961818331U, -961609657U, -961402753U, -961196113U, -960989921U, -960783503U, -960575053U, -960369671U, -960164357U, -959958569U, -959751467U, -959545339U, -959337787U, -959132063U, -958927643U, -958719757U, -958513207U, -958308079U, -958099903U, -957892121U, -957686003U, -957479813U, -957274463U, -957070073U, -956863231U, -956656499U, -956450219U, -956243017U, -956035967U, -955827647U, -955619213U, -955411801U, -955206139U, -955000157U, -954793003U, -954587419U, -954379667U, -954173333U, -953967467U, -953761241U, -953554561U, -953347751U, -953141549U, -952936403U, -952729321U, -952522433U, -952313891U, -952108571U, -951902069U, -951695267U, -951487843U, -951281183U, -951072641U, -950867891U, -950659939U, -950453393U, -950245817U, -950038891U, -949831711U, -949624163U, -949418621U, -949210631U, -949004237U, -948797947U, -948590129U, -948383503U, -948176329U, -947969749U, -947762281U, -947557529U, -947350549U, -947146309U, -946941377U, -946733339U, -946525397U, -946319123U, -946112749U, -945906653U, -945699767U, -945493957U, -945286103U, -945079393U, -944872997U, -944666137U, -944457727U, -944251129U, -944045093U, -943841623U, -943634413U, -943428457U, -943221553U, -943014223U, -942807059U, -942599201U, -942394279U, -942186577U, -941980649U, -941770757U, -941565017U, -941358941U, -941153023U, -940944761U, -940739473U, -940534457U, -940328141U, -940121129U, -939914237U, -939707311U, -939498481U, -939290711U, -939083969U, -938877299U, -938670497U, -938463313U, -938256743U, -938050571U, -937843117U, -937635403U, -937430023U, -937224481U, -937017241U, -936808751U, -936602551U, -936393247U, -936187487U, -935980187U, -935774839U, -935568223U, -935362513U, -935157149U, -934950433U, -934744141U, -934538333U, -934332799U, -934125721U, -933915907U, -933712601U, -933505961U, -933298987U, -933094187U, -932887321U, -932682197U, -932474657U, -932268949U, -932062069U, -931853539U, -931648031U, -931441501U, -931235729U, -931028831U, -930822023U, -930615799U, -930410359U, -930203363U, -929997377U, -929791073U, -929583461U, -929378647U, -929171809U, -928961563U, -928753213U, -928546337U, -928340111U, -928133047U, -927927431U, -927719873U, -927511327U, -927303313U, -927097819U, -926891057U, -926683861U, -926476429U, -926272069U, -926065423U, -925858279U, -925653983U, -925447087U, -925239961U, -925034359U, -924827639U, -924620899U, -924415159U, -924208093U, -924001801U, -923795833U, -923589143U, -923381033U, -923174653U, -922968353U, -922762307U, -922554167U, -922346597U, -922140283U, -921933101U, -921726833U, -921521323U, -921314491U, -921104917U, -920900389U, -920696473U, -920488883U, -920284241U, -920077003U, -919871549U, -919665931U, -919461089U, -919253327U, -919047611U, -918843181U, -918636781U, -918431209U, -918225853U, -918018929U, -917810801U, -917602223U, -917395903U, -917188477U, -916982489U, -916774951U, -916568707U, -916361893U, -916156721U, -915951917U, -915745531U, -915540091U, -915333547U, -915126503U, -914921417U, -914715511U, -914509529U, -914303749U, -914097449U, -913892719U, -913684151U, -913479859U, -913271237U, -913061893U, -912856787U, -912650659U, -912447581U, -912239071U, -912033929U, -911828861U, -911623931U, -911416811U, -911211313U, -911004803U, -910799521U, -910594129U, -910388137U, -910180189U, -909975103U, -909769517U, -909564301U, -909358363U, -909154039U, -908950027U, -908742859U, -908536289U, -908330999U, -908122427U, -907915453U, -907709161U, -907504669U, -907298807U, -907092811U, -906888161U, -906681863U, -906477373U, -906270719U, -906063619U, -905857787U, -905652047U, -905446649U, -905241457U, -905037937U, -904830643U, -904624129U, -904412191U, -904207417U, -904001689U, -903795047U, -903589319U, -903382463U, -903178417U, -902973857U, -902767081U, -902558269U, -902351161U, -902142887U, -901935031U, -901729561U, -901524121U, -901318051U, -901111439U, -900906637U, -900700831U, -900494867U, -900290857U, -900084401U, -899879263U, -899671099U, -899463869U, -899258387U, -899051437U, -898845781U, -898638131U, -898431239U, -898226999U, -898020311U, -897812969U, -897607853U, -897401333U, -897194827U, -896988797U, -896782561U, -896575313U, -896370289U, -896163013U, -895955897U, -895751147U, -895544131U, -895337041U, -895131739U, -894924157U, -894717371U, -894511207U, -894304603U, -894098801U, -893892721U, -893686333U, -893479253U, -893273831U, -893069227U, -892863337U, -892659133U, -892455203U, -892249121U, -892042433U, -891836821U, -891629833U, -891421211U, -891214297U, -891007393U, -890801147U, -890593727U, -890387999U, -890182673U, -889977527U, -889771829U, -889565387U, -889357043U, -889151611U, -888944711U, -888738751U, -888533159U, -888326333U, -888119311U, -887913683U, -887710319U, -887504369U, -887298869U, -887092457U, -886885721U, -886678853U, -886474403U, -886268503U, -886062503U, -885857129U, -885650761U, -885443579U, -885236993U, -885030703U, -884822867U, -884615929U, -884409923U, -884205199U, -883998877U, -883793107U, -883588081U, -883380077U, -883172489U, -882967091U, -882760639U, -882556957U, -882351131U, -882144853U, -881939497U, -881732437U, -881527169U, -881321641U, -881116981U, -880910321U, -880702661U, -880495237U, -880288337U, -880082239U, -879875501U, -879669793U, -879464407U, -879258439U, -879051493U, -878846819U, -878642081U, -878436607U, -878230709U, -878025917U, -877819699U, -877613479U, -877406449U, -877200449U, -876993101U, -876786593U, -876580267U, -876375277U, -876167623U, -875960333U, -875755271U, -875547059U, -875341081U, -875133761U, -874927159U, -874724077U, -874517923U, -874312423U, -874106309U, -873900127U, -873692717U, -873487577U, -873282323U, -873076363U, -872872051U, -872667931U, -872461297U, -872252947U, -872048687U, -871843979U, -871637411U, -871431779U, -871224707U, -871016617U, -870810277U, -870604591U, -870398107U, -870193447U, -869988349U, -869782429U, -869579747U, -869372099U, -869166061U, -868958539U, -868754771U, -868548341U, -868343237U, -868135109U, -867930487U, -867723991U, -867518711U, -867314957U, -867109753U, -866904347U, -866699791U, -866493643U, -866287339U, -866080493U, -865873159U, -865665811U, -865460467U, -865256173U, -865051073U, -864844751U, -864638191U, -864434687U, -864229549U, -864024071U, -863818961U, -863613349U, -863408839U, -863200651U, -862995349U, -862789141U, -862584491U, -862376869U, -862173199U, -861967571U, -861759439U, -861555043U, -861350729U, -861143057U, -860938087U, -860732359U, -860524417U, -860319727U, -860112137U, -859906457U, -859700689U, -859493447U, -859285943U, -859078879U, -858872177U, -858667783U, -858462079U, -858257021U, -858050153U, -857845171U, -857641481U, -857434343U, -857229661U, -857021821U, -856815683U, -856610141U, -856403957U, -856197857U, -855991243U, -855787067U, -855580549U, -855376927U, -855170389U, -854963783U, -854759743U, -854554699U, -854348233U, -854142089U, -853936907U, -853731059U, -853526381U, -853322969U, -853117247U, -852910259U, -852705479U, -852499171U, -852292559U, -852088277U, -851882099U, -851674477U, -851469019U, -851264669U, -851057611U, -850851587U, -850646939U, -850441219U, -850233557U, -850027799U, -849822679U, -849618937U, -849412657U, -849206053U, -849000613U, -848795179U, -848593357U, -848389111U, -848183599U, -847977167U, -847770809U, -847565239U, -847359661U, -847153661U, -846946957U, -846740357U, -846533267U, -846328151U, -846122219U, -845917427U, -845711719U, -845507317U, -845300191U, -845093831U, -844888931U, -844684639U, -844476407U, -844270619U, -844064857U, -843857627U, -843651791U, -843446467U, -843243067U, -843038501U, -842832899U, -842629639U, -842424053U, -842217149U, -842013313U, -841808101U, -841604131U, -841399711U, -841190411U, -840984299U, -840779671U, -840573443U, -840368603U, -840162481U, -839958013U, -839751259U, -839547497U, -839344031U, -839137381U, -838930861U, -838723777U, -838515877U, -838312229U, -838108081U, -837905749U, -837700639U, -837495367U, -837289603U, -837084181U, -836877871U, -836671211U, -836468057U, -836260973U, -836056369U, -835849453U, -835644737U, -835437937U, -835233631U, -835027631U, -834821531U, -834617561U, -834413053U, -834207961U, -834001559U, -833795381U, -833590399U, -833388103U, -833180779U, -832975837U, -832771883U, -832566463U, -832361093U, -832154209U, -831950087U, -831745181U, -831538217U, -831331097U, -831128377U, -830922097U, -830714711U, -830510453U, -830306963U, -830101141U, -829895009U, -829689409U, -829481797U, -829277191U, -829072877U, -828868163U, -828661567U, -828457241U, -828252463U, -828047761U, -827842021U, -827636519U, -827429737U, -827225387U, -827019359U, -826814369U, -826608259U, -826403551U, -826198921U, -825992749U, -825787181U, -825582193U, -825377621U, -825173177U, -824968519U, -824762513U, -824555269U, -824349683U, -824142367U, -823937089U, -823731899U, -823527623U, -823323491U, -823117289U, -822911773U, -822704539U, -822498949U, -822298387U, -822092333U, -821884897U, -821679041U, -821473817U, -821267743U, -821060567U, -820857749U, -820652309U, -820449247U, -820243231U, -820038239U, -819832337U, -819626957U, -819422881U, -819216481U, -819009029U, -818804929U, -818600191U, -818395423U, -818188193U, -817983277U, -817775953U, -817571851U, -817365001U, -817161731U, -816957101U, -816754249U, -816547183U, -816342731U, -816137629U, -815932811U, -815728063U, -815525041U, -815320771U, -815114593U, -814909063U, -814704377U, -814499137U, -814294979U, -814090049U, -813884047U, -813678431U, -813473777U, -813266687U, -813062197U, -812858303U, -812653463U, -812444767U, -812240867U, -812035387U, -811829387U, -811623677U, -811416707U, -811210409U, -811006307U, -810802211U, -810597041U, -810391237U, -810187129U, -809982451U, -809777047U, -809570357U, -809367527U, -809162383U, -808957727U, -808753609U, -808548869U, -808343827U, -808138619U, -807933043U, -807728011U, -807520933U, -807315097U, -807110879U, -806906183U, -806700733U, -806496791U, -806292649U, -806087551U, -805883863U, -805677811U, -805473197U, -805269511U, -805063621U, -804860167U, -804656609U, -804452377U, -804248353U, -804043717U, -803837729U, -803632777U, -803427617U, -803222543U, -803016983U, -802811783U, -802605607U, -802398869U, -802193299U, -801988721U, -801783091U, -801576833U, -801372301U, -801170593U, -800964947U, -800759837U, -800555507U, -800349989U, -800145637U, -799941431U, -799735591U, -799530211U, -799321723U, -799115183U, -798908287U, -798702907U, -798498577U, -798294529U, -798091429U, -797886301U, -797683489U, -797478323U, -797274593U, -797070173U, -796866731U, -796663463U, -796458079U, -796253543U, -796047509U, -795843017U, -795637589U, -795433099U, -795228689U, -795024343U, -794818757U, -794611771U, -794405483U, -794201981U, -793996361U, -793791871U, -793589521U, -793383473U, -793175657U, -792971173U, -792767303U, -792562187U, -792356891U, -792152663U, -791946361U, -791741987U, -791537057U, -791331511U, -791127121U, -790921451U, -790715449U, -790512449U, -790309699U, -790103269U, -789898783U, -789696023U, -789491359U, -789286541U, -789083311U, -788879213U, -788676593U, -788471473U, -788266363U, -788060909U, -787855697U, -787649867U, -787445047U, -787238801U, -787033469U, -786827917U, -786623683U, -786418057U, -786213613U, -786009541U, -785805851U, -785602429U, -785397241U, -785192389U, -784987867U, -784784137U, -784580513U, -784374709U, -784168753U, -783964201U, -783759491U, -783556097U, -783350957U, -783146677U, -782942621U, -782737691U, -782533847U, -782329189U, -782124271U, -781920047U, -781716347U, -781508461U, -781306091U, -781102481U, -780898067U, -780693167U, -780489373U, -780281669U, -780078977U, -779874761U, -779670799U, -779465539U, -779259721U, -779055377U, -778850389U, -778646443U, -778439353U, -778234753U, -778029961U, -777825071U, -777620797U, -777415897U, -777212977U, -777008467U, -776805607U, -776599469U, -776394529U, -776188249U, -775983587U, -775778981U, -775571197U, -775363819U, -775160839U, -774958963U, -774755101U, -774549131U, -774344911U, -774139987U, -773935823U, -773731103U, -773525183U, -773320489U, -773114789U, -772908407U, -772703273U, -772499641U, -772296299U, -772091959U, -771888739U, -771682333U, -771478817U, -771274909U, -771069413U, -770866417U, -770659819U, -770457361U, -770251723U, -770047417U, -769842737U, -769639153U, -769435741U, -769230353U, -769026721U, -768821993U, -768617809U, -768415003U, -768209993U, -768005369U, -767801081U, -767596649U, -767392177U, -767188109U, -766984861U, -766780723U, -766577017U, -766370587U, -766165427U, -765960827U, -765755923U, -765551887U, -765346807U, -765140107U, -764934101U, -764729831U, -764524559U, -764318081U, -764113409U, -763908421U, -763702871U, -763496977U, -763292863U, -763085441U, -762881213U, -762677887U, -762472883U, -762269491U, -762066233U, -761861773U, -761656757U, -761454761U, -761250397U, -761045281U, -760841267U, -760636241U, -760431571U, -760227421U, -760022563U, -759818119U, -759613373U, -759409121U, -759205961U, -759002147U, -758797409U, -758590351U, -758386777U, -758180999U, -757974431U, -757770557U, -757563913U, -757360343U, -757155391U, -756951557U, -756745879U, -756541993U, -756335977U, -756132043U, -755928577U, -755725219U, -755522717U, -755318411U, -755117449U, -754911943U, -754708613U, -754505491U, -754301363U, -754096429U, -753891353U, -753686273U, -753478769U, -753274433U, -753071041U, -752863843U, -752659769U, -752454491U, -752252723U, -752047913U, -751843847U, -751641613U, -751436113U, -751231693U, -751027219U, -750820591U, -750617599U, -750413071U, -750209107U, -750002681U, -749799353U, -749596063U, -749390321U, -749187239U, -748983497U, -748777097U, -748570727U, -748365781U, -748161493U, -747956771U, -747753049U, -747549137U, -747345839U, -747141341U, -746936653U, -746730653U, -746525287U, -746319589U, -746115709U, -745910587U, -745706963U, -745500979U, -745297621U, -745091561U, -744887953U, -744681803U, -744478247U, -744274087U, -744070963U, -743866531U, -743660123U, -743455499U, -743252057U, -743046131U, -742841441U, -742636201U, -742430959U, -742227581U, -742023407U, -741819343U, -741614831U, -741412043U, -741210733U, -741006107U, -740802157U, -740599147U, -740395081U, -740190901U, -739986479U, -739783483U, -739579301U, -739376173U, -739172509U, -738967561U, -738763513U, -738560629U, -738354811U, -738150871U, -737948891U, -737742631U, -737539013U, -737333279U, -737130917U, -736926341U, -736721627U, -736518637U, -736313399U, -736107901U, -735905449U, -735701039U, -735498311U, -735292559U, -735087839U, -734883719U, -734680031U, -734475019U, -734270261U, -734066527U, -733863617U, -733658491U, -733451969U, -733248409U, -733045849U, -732842687U, -732637471U, -732431977U, -732227963U, -732024677U, -731820107U, -731616659U, -731410013U, -731206789U, -731003699U, -730800157U, -730597859U, -730392911U, -730186241U, -729983159U, -729778739U, -729572989U, -729367999U, -729164873U, -728958179U, -728752537U, -728547713U, -728343281U, -728139547U, -727934741U, -727731241U, -727527331U, -727325023U, -727122239U, -726918719U, -726714731U, -726508303U, -726304021U, -726100841U, -725896487U, -725691401U, -725488607U, -725283917U, -725079499U, -724872257U, -724670717U, -724465921U, -724262933U, -724059107U, -723855389U, -723651367U, -723447541U, -723243071U, -723040919U, -722835679U, -722632091U, -722430077U, -722225747U, -722022241U, -721818211U, -721614809U, -721411309U, -721206137U, -721001899U, -720798943U, -720594737U, -720394001U, -720189739U, -719985113U, -719779663U, -719574659U, -719370763U, -719168381U, -718965557U, -718759667U, -718557457U, -718352377U, -718147487U, -717944737U, -717741457U, -717537397U, -717333257U, -717129419U, -716926489U, -716723647U, -716518147U, -716314759U, -716110303U, -715906249U, -715701733U, -715496503U, -715293221U, -715088713U, -714884113U, -714679831U, -714473567U, -714269599U, -714065827U, -713862659U, -713657779U, -713453441U, -713248951U, -713045633U, -712842859U, -712636681U, -712433479U, -712230031U, -712028087U, -711824431U, -711620251U, -711416557U, -711212743U, -711009647U, -710806249U, -710602241U, -710397929U, -710193521U, -709987973U, -709784423U, -709579397U, -709375097U, -709173313U, -708971059U, -708766621U, -708560641U, -708357941U, -708154789U, -707951423U, -707747771U, -707544449U, -707340901U, -707136037U, -706933907U, -706729477U, -706526057U, -706322767U, -706119229U, -705915263U, -705708581U, -705507211U, -705303433U, -705098729U, -704896967U, -704689123U, -704485543U, -704283677U, -704081153U, -703877453U, -703673827U, -703469479U, -703265593U, -703061603U, -702857261U, -702652763U, -702450323U, -702246911U, -702042587U, -701839483U, -701635811U, -701431931U, -701230391U, -701026709U, -700824233U, -700619299U, -700414969U, -700211597U, -700008041U, -699803639U, -699601703U, -699396107U, -699192971U, -698990321U, -698784601U, -698583167U, -698379893U, -698174573U, -697969771U, -697766647U, -697562161U, -697358087U, -697153277U, -696948883U, -696745613U, -696541897U, -696337199U, -696132923U, -695930063U, -695727287U, -695524421U, -695321987U, -695118793U, -694915033U, -694713121U, -694510799U, -694308409U, -694103749U, -693902189U, -693697861U, -693495707U, -693290693U, -693086063U, -692880593U, -692676043U, -692471839U, -692267629U, -692066027U, -691860787U, -691654427U, -691452701U, -691248563U, -691046197U, -690843497U, -690640073U, -690436451U, -690233857U, -690031691U, -689827861U, -689626391U, -689421461U, -689218693U, -689016061U, -688813313U, -688608259U, -688404593U, -688201453U, -688000597U, -687794941U, -687591491U, -687387941U, -687185729U, -686981179U, -686778749U, -686575619U, -686372573U, -686170627U, -685965883U, -685763807U, -685561589U, -685358743U, -685152973U, -684952267U, -684749539U, -684546301U, -684343783U, -684139223U, -683937043U, -683733839U, -683530657U, -683328223U, -683124397U, -682920827U, -682714943U, -682511183U, -682309351U, -682103599U, -681899051U, -681696179U, -681493469U, -681289709U, -681085721U, -680882903U, -680679397U, -680471927U, -680270299U, -680065777U, -679861867U, -679660061U, -679456607U, -679253357U, -679050059U, -678847717U, -678642989U, -678440069U, -678236347U, -678035641U, -677830873U, -677628803U, -677424799U, -677220611U, -677016947U, -676812611U, -676609151U, -676406209U, -676201349U, -675997891U, -675795247U, -675590893U, -675387701U, -675183583U, -674978831U, -674776187U, -674572439U, -674370167U, -674165113U, -673961681U, -673757599U, -673553927U, -673350653U, -673147133U, -672945331U, -672743177U, -672540733U, -672338573U, -672133181U, -671930689U, -671727011U, -671523233U, -671318261U, -671115199U, -670911421U, -670709293U, -670506917U, -670302641U, -670101259U, -669897967U, -669694541U, -669491029U, -669287683U, -669083971U, -668881069U, -668676179U, -668472397U, -668270507U, -668068201U, -667863941U, -667658281U, -667455779U, -667252673U, -667049989U, -666846907U, -666644311U, -666440711U, -666237587U, -666033439U, -665831629U, -665628493U, -665425433U, -665220097U, -665019863U, -664815269U, -664610027U, -664406489U, -664204199U, -663999913U, -663797773U, -663594973U, -663391571U, -663189217U, -662985991U, -662781139U, -662578771U, -662376301U, -662173163U, -661970923U, -661766587U, -661564117U, -661360867U, -661158109U, -660956579U, -660753323U, -660550507U, -660347899U, -660143741U, -659941621U, -659737963U, -659535911U, -659332409U, -659131883U, -658928773U, -658726249U, -658522097U, -658318981U, -658115791U, -657911473U, -657709483U, -657506237U, -657303599U, -657101573U, -656898113U, -656695649U, -656493203U, -656289511U, -656086637U, -655885333U, -655683869U, -655477967U, -655274233U, -655071191U, -654867817U, -654663497U, -654460787U, -654256483U, -654053731U, -653852063U, -653650927U, -653448149U, -653244967U, -653042101U, -652837447U, -652635847U, -652434457U, -652230121U, -652026413U, -651823261U, -651619429U, -651414263U, -651213137U, -651010247U, -650806159U, -650604349U, -650401841U, -650199787U, -649998353U, -649795441U, -649591843U, -649389071U, -649186823U, -648983471U, -648779801U, -648576407U, -648375163U, -648172121U, -647967751U, -647766323U, -647563951U, -647360759U, -647158151U, -646956643U, -646751759U, -646549147U, -646347641U, -646142711U, -645940591U, -645738493U, -645535757U, -645336379U, -645133271U, -644930747U, -644725849U, -644524271U, -644320097U, -644116379U, -643912121U, -643709431U, -643507399U, -643302419U, -643098277U, -642895997U, -642692101U, -642490577U, -642287293U, -642084581U, -641879369U, -641675651U, -641473507U, -641272769U, -641068943U, -640865791U, -640663691U, -640461149U, -640258441U, -640056797U, -639853933U, -639651763U, -639448993U, -639245209U, -639043667U, -638841017U, -638636197U, -638432797U, -638230627U, -638028499U, -637825693U, -637622473U, -637419509U, -637218331U, -637014737U, -636813649U, -636611513U, -636407791U, -636204119U, -636002737U, -635801591U, -635599907U, -635397629U, -635193677U, -634989863U, -634789277U, -634586243U, -634382291U, -634179061U, -633977947U, -633775931U, -633574021U, -633367927U, -633164879U, -632962807U, -632759377U, -632555153U, -632351501U, -632150209U, -631946437U, -631743881U, -631540807U, -631339997U, -631139219U, -630934589U, -630731029U, -630527089U, -630324089U, -630122813U, -629920561U, -629717899U, -629513603U, -629311447U, -629108819U, -628907117U, -628703701U, -628502051U, -628298389U, -628095469U, -627893857U, -627691369U, -627491489U, -627289417U, -627087541U, -626884411U, -626682481U, -626481029U, -626279263U, -626075917U, -625873021U, -625669463U, -625467991U, -625264193U, -625060103U, -624858583U, -624656741U, -624453941U, -624251627U, -624049919U, -623848559U, -623644843U, -623442283U, -623240573U, -623038027U, -622835881U, -622632193U, -622429267U, -622225393U, -622024201U, -621821443U, -621618353U, -621416293U, -621213811U, -621010913U, -620807219U, -620605273U, -620404303U, -620202071U, -619998289U, -619795069U, -619594111U, -619392973U, -619191751U, -618987839U, -618784261U, -618581881U, -618380407U, -618179491U, -617976509U, -617775247U, -617572051U, -617364289U, -617162387U, -616957969U, -616754869U, -616551841U, -616350121U, -616148317U, -615943327U, -615740759U, -615539033U, -615337127U, -615132989U, -614932831U, -614733143U, -614529679U, -614325851U, -614124109U, -613920361U, -613718159U, -613514249U, -613312057U, -613110397U, -612910351U, -612707237U, -612504667U, -612304261U, -612103909U, -611900753U, -611698123U, -611496157U, -611294227U, -611090479U, -610887731U, -610683587U, -610480919U, -610280401U, -610078039U, -609876131U, -609674269U, -609471799U, -609269761U, -609066739U, -608862853U, -608660761U, -608456423U, -608255107U, -608053217U, -607852319U, -607649767U, -607446799U, -607245157U, -607042897U, -606840127U, -606637931U, -606436657U, -606232813U, -606032149U, -605830289U, -605626213U, -605422177U, -605219947U, -605016959U, -604813397U, -604610459U, -604408589U, -604206847U, -604006127U, -603805283U, -603604933U, -603403301U, -603202087U, -603001453U, -602798479U, -602596451U, -602394857U, -602192561U, -601991009U, -601786813U, -601586017U, -601384957U, -601182587U, -600980227U, -600778547U, -600576233U, -600374387U, -600172591U, -599971679U, -599769923U, -599566883U, -599363221U, -599161111U, -598958683U, -598756549U, -598555813U, -598352719U, -598150877U, -597947153U, -597745297U, -597541999U, -597337567U, -597136207U, -596934421U, -596732161U, -596529809U, -596328263U, -596126887U, -595926047U, -595726231U, -595525477U, -595323367U, -595123103U, -594920329U, -594717373U, -594516499U, -594314507U, -594112087U, -593912741U, -593711309U, -593508803U, -593308451U, -593103053U, -592900741U, -592698257U, -592494193U, -592293173U, -592091407U, -591888067U, -591687923U, -591486463U, -591284051U, -591082729U, -590883119U, -590681459U, -590480369U, -590278001U, -590076283U, -589874573U, -589674193U, -589472339U, -589270849U, -589070381U, -588870313U, -588669443U, -588464057U, -588263561U, -588060061U, -587857031U, -587654689U, -587452897U, -587251337U, -587049017U, -586846721U, -586644491U, -586443799U, -586242571U, -586040383U, -585835819U, -585633127U, -585433627U, -585230879U, -585029329U, -584826139U, -584624393U, -584422913U, -584219341U, -584015989U, -583814299U, -583611703U, -583411267U, -583210997U, -583007807U, -582807571U, -582605579U, -582405001U, -582205361U, -582002873U, -581798431U, -581597867U, -581397871U, -581194717U, -580991603U, -580790069U, -580589203U, -580387013U, -580186129U, -579982621U, -579781781U, -579578579U, -579376393U, -579178037U, -578976389U, -578773919U, -578570711U, -578369717U, -578169673U, -577965979U, -577763447U, -577562731U, -577360717U, -577158581U, -576956839U, -576754333U, -576554747U, -576354287U, -576152683U, -575949761U, -575748139U, -575545297U, -575344691U, -575141939U, -574940273U, -574739071U, -574537841U, -574335733U, -574132697U, -573930839U, -573729197U, -573527359U, -573326459U, -573124847U, -572923643U, -572722207U, -572520763U, -572320277U, -572119133U, -571917083U, -571714459U, -571514039U, -571312447U, -571109333U, -570908267U, -570706163U, -570505211U, -570302011U, -570100901U, -569899741U, -569695739U, -569494903U, -569292637U, -569090791U, -568890131U, -568688333U, -568486201U, -568285241U, -568083853U, -567883439U, -567682277U, -567480181U, -567278477U, -567075389U, -566876873U, -566672047U, -566471351U, -566269831U, -566067713U, -565866193U, -565665403U, -565463131U, -565261157U, -565060669U, -564859157U, -564657833U, -564456637U, -564253399U, -564050923U, -563849423U, -563648951U, -563446757U, -563245951U, -563043527U, -562844081U, -562640021U, -562439363U, -562237279U, -562037263U, -561836309U, -561636739U, -561436591U, -561233341U, -561031321U, -560827517U, -560628337U, -560425741U, -560224517U, -560023267U, -559821347U, -559619603U, -559418737U, -559216529U, -559013027U, -558812473U, -558611803U, -558408817U, -558207941U, -558007081U, -557807857U, -557605397U, -557403169U, -557203447U, -557001349U, -556799281U, -556595849U, -556396177U, -556194521U, -555994253U, -555791333U, -555590479U, -555389213U, -555186431U, -554986511U, -554785073U, -554584267U, -554380919U, -554178277U, -553976713U, -553776191U, -553572707U, -553372213U, -553172117U, -552972401U, -552771497U, -552570311U, -552369217U, -552167767U, -551967211U, -551766811U, -551565811U, -551364811U, -551162357U, -550961809U, -550761137U, -550560139U, -550358761U, -550159567U, -549958901U, -549757049U, -549557549U, -549356981U, -549155773U, -548954101U, -548752109U, -548551309U, -548349407U, -548149279U, -547949123U, -547747367U, -547545563U, -547344871U, -547145353U, -546945383U, -546744547U, -546542723U, -546340393U, -546138457U, -545937809U, -545735521U, -545535997U, -545334311U, -545133191U, -544932499U, -544732439U, -544530967U, -544329011U, -544127197U, -543926419U, -543724817U, -543523769U, -543322561U, -543119747U, -542918149U, -542717267U, -542513899U, -542313859U, -542112257U, -541910729U, -541709111U, -541507361U, -541304821U, -541103399U, -540902563U, -540701129U, -540501653U, -540301187U, -540098873U, -539897623U, -539694797U, -539494807U, -539294407U, -539095981U, -538892941U, -538692157U, -538491649U, -538288771U, -538087817U, -537887657U, -537687739U, -537487169U, -537284981U, -537083843U, -536882651U, -536681611U, -536479873U, -536280743U, -536080177U, -535880399U, -535676699U, -535475179U, -535275227U, -535076489U, -534877139U, -534675809U, -534475439U, -534273799U, -534072523U, -533871847U, -533669711U, -533467969U, -533268401U, -533066321U, -532865881U, -532665751U, -532465837U, -532263973U, -532062943U, -531863203U, -531661121U, -531460661U, -531258587U, -531058793U, -530857277U, -530654587U, -530453389U, -530251793U, -530050559U, -529850803U, -529650467U, -529450759U, -529250581U, -529048207U, -528848687U, -528646109U, -528445363U, -528244949U, -528043793U, -527843429U, -527644543U, -527442943U, -527244271U, -527042909U, -526841269U, -526640363U, -526441231U, -526241101U, -526040443U, -525839239U, -525638411U, -525434137U, -525234989U, -525033917U, -524833663U, -524631677U, -524432423U, -524231369U, -524029361U, -523831199U, -523626899U, -523425431U, -523225741U, -523026701U, -522826373U, -522627043U, -522427067U, -522224917U, -522023401U, -521821427U, -521621959U, -521422549U, -521221067U, -521019319U, -520817963U, -520616627U, -520416683U, -520213721U, -520012981U, -519811693U, -519612167U, -519410641U, -519212537U, -519010183U, -518809799U, -518610613U, -518408963U, -518208749U, -518007229U, -517808209U, -517608347U, -517408183U, -517207921U, -517005949U, -516805997U, -516604573U, -516406013U, -516207467U, -516008153U, -515806139U, -515604629U, -515405351U, -515204141U, -515003767U, -514802657U, -514601641U, -514400261U, -514198963U, -513997249U, -513796343U, -513594311U, -513394933U, -513194443U, -512993147U, -512791793U, -512591657U, -512391179U, -512189567U, -511989869U, -511791689U, -511592533U, -511390471U, -511189741U, -510988547U, -510785537U, -510583921U, -510382417U, -510182483U, -509981909U, -509779393U, -509577611U, -509376979U, -509178223U, -508978709U, -508776343U, -508576129U, -508377131U, -508175669U, -507974827U, -507776117U, -507575839U, -507374239U, -507172243U, -506971207U, -506771051U, -506569117U, -506371009U, -506169997U, -505970363U, -505771171U, -505568621U, -505370287U, -505167449U, -504965723U, -504765221U, -504565993U, -504363793U, -504162943U, -503962243U, -503761499U, -503562671U, -503362183U, -503161073U, -502963723U, -502760147U, -502557053U, -502358569U, -502157779U, -501955921U, -501757211U, -501555529U, -501353029U, -501151003U, -500950243U, -500749423U, -500548927U, -500349547U, -500150419U, -499949237U, -499748027U, -499548073U, -499348043U, -499148371U, -498946183U, -498744937U, -498544243U, -498344221U, -498145331U, -497944339U, -497742803U, -497542301U, -497342597U, -497142461U, -496944137U, -496743421U, -496542467U, -496342559U, -496141033U, -495942431U, -495744017U, -495541757U, -495342109U, -495144467U, -494944381U, -494744039U, -494544251U, -494343253U, -494142589U, -493941887U, -493744421U, -493544963U, -493343107U, -493144049U, -492942053U, -492741779U, -492543169U, -492340843U, -492142411U, -491941981U, -491741039U, -491539963U, -491339879U, -491139391U, -490939979U, -490739591U, -490540991U, -490338143U, -490138709U, -489939733U, -489741347U, -489539027U, -489340637U, -489141589U, -488941511U, -488740841U, -488539937U, -488338727U, -488139371U, -487937057U, -487738711U, -487538809U, -487339261U, -487140481U, -486937639U, -486736531U, -486537329U, -486338273U, -486136883U, -485937509U, -485738203U, -485538127U, -485337989U, -485140349U, -484937711U, -484737509U, -484536757U, -484336837U, -484137497U, -483939971U, -483737039U, -483537449U, -483337639U, -483138653U, -482938283U, -482739253U, -482538299U, -482338403U, -482138263U, -481938917U, -481736617U, -481536409U, -481337513U, -481137857U, -480937759U, -480739001U, -480537581U, -480336917U, -480136567U, -479938223U, -479737619U, -479539097U, -479339183U, -479141059U, -478942067U, -478741559U, -478542703U, -478340857U, -478142449U, -477944321U, -477743977U, -477546011U, -477347399U, -477147521U, -476947259U, -476747641U, -476548901U, -476348827U, -476150273U, -475948013U, -475750589U, -475551379U, -475352797U, -475150409U, -474949693U, -474751171U, -474549793U, -474348517U, -474147491U, -473949131U, -473748619U, -473548253U, -473348831U, -473147219U, -472948547U, -472747463U, -472547989U, -472347287U, -472145659U, -471945917U, -471748649U, -471548069U, -471348961U, -471149207U, -470950153U, -470748791U, -470549347U, -470351477U, -470150717U, -469952341U, -469751767U, -469551091U, -469352539U, -469151213U, -468950203U, -468751051U, -468552247U, -468353461U, -468152129U, -467952377U, -467754227U, -467555227U, -467355353U, -467156101U, -466955911U, -466757003U, -466556239U, -466357963U, -466158311U, -465959267U, -465760007U, -465561557U, -465360937U, -465161383U, -464962279U, -464762321U, -464563501U, -464362757U, -464163571U, -463962397U, -463764967U, -463564469U, -463364893U, -463166261U, -462966761U, -462766189U, -462569413U, -462372247U, -462170981U, -461971409U, -461772973U, -461573053U, -461372407U, -461172953U, -460973837U, -460773757U, -460575421U, -460375787U, -460175531U, -459975463U, -459775529U, -459576269U, -459375529U, -459176827U, -458978837U, -458778251U, -458579623U, -458378449U, -458179201U, -457980247U, -457780087U, -457579873U, -457380149U, -457179883U, -456978043U, -456778277U, -456580403U, -456382621U, -456183779U, -455983999U, -455784811U, -455587133U, -455387473U, -455190709U, -454989583U, -454790839U, -454592141U, -454393207U, -454192829U, -453991639U, -453792349U, -453594863U, -453395477U, -453195317U, -452997271U, -452797781U, -452598371U, -452398861U, -452198111U, -451999063U, -451798381U, -451599991U, -451401329U, -451203043U, -451003369U, -450804311U, -450605033U, -450406111U, -450207323U, -450005779U, -449805127U, -449607377U, -449408263U, -449210183U, -449009257U, -448811263U, -448610651U, -448410961U, -448211779U, -448012727U, -447814069U, -447614969U, -447417629U, -447219607U, -447018653U, -446819507U, -446619211U, -446420999U, -446222983U, -446025029U, -445823501U, -445625413U, -445426213U, -445225961U, -445026437U, -444825617U, -444626759U, -444429047U, -444229369U, -444030101U, -443829811U, -443630137U, -443431517U, -443232901U, -443033827U, -442834741U, -442637519U, -442437967U, -442240273U, -442041881U, -441842741U, -441643283U, -441444281U, -441245989U, -441046421U, -440848217U, -440650913U, -440452801U, -440253907U, -440054633U, -439853749U, -439654013U, -439457189U, -439257359U, -439056533U, -438858703U, -438659831U, -438462467U, -438263159U, -438064609U, -437865427U, -437666947U, -437466863U, -437268773U, -437068847U, -436868449U, -436670497U, -436471037U, -436273589U, -436074449U, -435875689U, -435675841U, -435478531U, -435278447U, -435078181U, -434878967U, -434679697U, -434481449U, -434283781U, -434085941U, -433886129U, -433689709U, -433489633U, -433289327U, -433091431U, -432890333U, -432691601U, -432492787U, -432294497U, -432094483U, -431894923U, -431696873U, -431497559U, -431296277U, -431098417U, -430900109U, -430702603U, -430503809U, -430302787U, -430105099U, -429906679U, -429707029U, -429509417U, -429310421U, -429109423U, -428910857U, -428711483U, -428511703U, -428314927U, -428117311U, -427918651U, -427719401U, -427521481U, -427322989U, -427123111U, -426925133U, -426724349U, -426525871U, -426326893U, -426127813U, -425928799U, -425728997U, -425533403U, -425334583U, -425135617U, -424936537U, -424737011U, -424541581U, -424343551U, -424146511U, -423946121U, -423748387U, -423548303U, -423351671U, -423152069U, -422954933U, -422755831U, -422557453U, -422359213U, -422158339U, -421960291U, -421763827U, -421563733U, -421366151U, -421167689U, -420969389U, -420769309U, -420572881U, -420375001U, -420176611U, -419976331U, -419776127U, -419578361U, -419379509U, -419179603U, -418979641U, -418780897U, -418582277U, -418383109U, -418183849U, -417986473U, -417785383U, -417587249U, -417388949U, -417191617U, -416992963U, -416794331U, -416597381U, -416398579U, -416200951U, -416001809U, -415803473U, -415603697U, -415405307U, -415207843U, -415009589U, -414810257U, -414610699U, -414413353U, -414215677U, -414018053U, -413818421U, -413621567U, -413423687U, -413225717U, -413026183U, -412828747U, -412631039U, -412431941U, -412232773U, -412034221U, -411835729U, -411636413U, -411439513U, -411240233U, -411042397U, -410843287U, -410646013U, -410449189U, -410249803U, -410050819U, -409853333U, -409656281U, -409458463U, -409258793U, -409058711U, -408860971U, -408664187U, -408464179U, -408266189U, -408065837U, -407867311U, -407669081U, -407471927U, -407271439U, -407073881U, -406877249U, -406679659U, -406479001U, -406280117U, -406082849U, -405884041U, -405687781U, -405490279U, -405291479U, -405093827U, -404895737U, -404697413U, -404499299U, -404301481U, -404102047U, -403904159U, -403705843U, -403507213U, -403310881U, -403112621U, -402915971U, -402715903U, -402517751U, -402320783U, -402121381U, -401923957U, -401724599U, -401528717U, -401332213U, -401131697U, -400931189U, -400733779U, -400535969U, -400336843U, -400139683U, -399941057U, -399744157U, -399547763U, -399350779U, -399152113U, -398954053U, -398755499U, -398555467U, -398357359U, -398159819U, -397961419U, -397764043U, -397567669U, -397369877U, -397171807U, -396973267U, -396774629U, -396577301U, -396379943U, -396181067U, -395980789U, -395781667U, -395584159U, -395385007U, -395188181U, -394990331U, -394794503U, -394596827U, -394396969U, -394198813U, -394002709U, -393804911U, -393606827U, -393408269U, -393210053U, -393009401U, -392811593U, -392612743U, -392415109U, -392218621U, -392022847U, -391824457U, -391626553U, -391429637U, -391231889U, -391033793U, -390835553U, -390637921U, -390441223U, -390241699U, -390042449U, -389843183U, -389645681U, -389447621U, -389248823U, -389052439U, -388855781U, -388656199U, -388459307U, -388259567U, -388061561U, -387864629U, -387667837U, -387469879U, -387272381U, -387076399U, -386878507U, -386682287U, -386482841U, -386284729U, -386088091U, -385888673U, -385690637U, -385492399U, -385295177U, -385097183U, -384897481U, -384702599U, -384503279U, -384303877U, -384105457U, -383910119U, -383710697U, -383513033U, -383314843U, -383118283U, -382920323U, -382722091U, -382526117U, -382327081U, -382131317U, -381932543U, -381733871U, -381536263U, -381339001U, -381141713U, -380943287U, -380745119U, -380549473U, -380353643U, -380155829U, -379959787U, -379761233U, -379564693U, -379368433U, -379169093U, -378972059U, -378774973U, -378576661U, -378379069U, -378181577U, -377986579U, -377790331U, -377593961U, -377396317U, -377199353U, -377001491U, -376804807U, -376607597U, -376412041U, -376214897U, -376016687U, -375818951U, -375622451U, -375423943U, -375226717U, -375030277U, -374835067U, -374637187U, -374441663U, -374245843U, -374049421U, -373850149U, -373652611U, -373455721U, -373259041U, -373061153U, -372865313U, -372666439U, -372467983U, -372269861U, -372073027U, -371875487U, -371679949U, -371481403U, -371284019U, -371087051U, -370890119U, -370690913U, -370493017U, -370294313U, -370097443U, -369899443U, -369703973U, -369505193U, -369307739U, -369109889U, -368911969U, -368714663U, -368517571U, -368320279U, -368120243U, -367923209U, -367726043U, -367529347U, -367332887U, -367135781U, -366938617U, -366741209U, -366543559U, -366347753U, -366149503U, -365955307U, -365756527U, -365558581U, -365363857U, -365166587U, -364970513U, -364773737U, -364575859U, -364377521U, -364179511U, -363983131U, -363785197U, -363588817U, -363390553U, -363195181U, -362999201U, -362803139U, -362604239U, -362406371U, -362210389U, -362014487U, -361815557U, -361619017U, -361423003U, -361226137U, -361028461U, -360832673U, -360635521U, -360439447U, -360240187U, -360040679U, -359842253U, -359645311U, -359447687U, -359249707U, -359052313U, -358858273U, -358661063U, -358463939U, -358266409U, -358068593U, -357872413U, -357675007U, -357478169U, -357280499U, -357083897U, -356885869U, -356688811U, -356492189U, -356295151U, -356098751U, -355901947U, -355704463U, -355507771U, -355309891U, -355114247U, -354917833U, -354720913U, -354523361U, -354326381U, -354130529U, -353933969U, -353737781U, -353539999U, -353342723U, -353145461U, -352948801U, -352753501U, -352555993U, -352360607U, -352163509U, -351967027U, -351769367U, -351572531U, -351374641U, -351177149U, -350980813U, -350785063U, -350585953U, -350388953U, -350192669U, -349996081U, -349801069U, -349605001U, -349408399U, -349212121U, -349017743U, -348820009U, -348624013U, -348426301U, -348229087U, -348031709U, -347834699U, -347637391U, -347439167U, -347242471U, -347044981U, -346849813U, -346652567U, -346454621U, -346257913U, -346061753U, -345865753U, -345669557U, -345473837U, -345275929U, -345078781U, -344882101U, -344684033U, -344488973U, -344292059U, -344097217U, -343898977U, -343703963U, -343508807U, -343311377U, -343115831U, -342919721U, -342722383U, -342523879U, -342328037U, -342131789U, -341935313U, -341738809U, -341541943U, -341347519U, -341150387U, -340953829U, -340757311U, -340561127U, -340364267U, -340168667U, -339974029U, -339778027U, -339582403U, -339384623U, -339187153U, -338991377U, -338796769U, -338599637U, -338403323U, -338206987U, -338010899U, -337813561U, -337615627U, -337419529U, -337223017U, -337028317U, -336830243U, -336634169U, -336437867U, -336240617U, -336046489U, -335848273U, -335650519U, -335451937U, -335257631U, -335061379U, -334866143U, -334671119U, -334475023U, -334278407U, -334081999U, -333885493U, -333689641U, -333493817U, -333295159U, -333099301U, -332902267U, -332708333U, -332513537U, -332317099U, -332121589U, -331923899U, -331726243U, -331530721U, -331334567U, -331139597U, -330943961U, -330746777U, -330549281U, -330353497U, -330155801U, -329958217U, -329761063U, -329565997U, -329372503U, -329175647U, -328979237U, -328784177U, -328586053U, -328389337U, -328193059U, -327995519U, -327800741U, -327605669U, -327410011U, -327213077U, -327017179U, -326821853U, -326623663U, -326428433U, -326231999U, -326037541U, -325842991U, -325645601U, -325448521U, -325253213U, -325057771U, -324862957U, -324666421U, -324471799U, -324273199U, -324076547U, -323881451U, -323686007U, -323491559U, -323294771U, -323098057U, -322903201U, -322706641U, -322510327U, -322315337U, -322119839U, -321923383U, -321727409U, -321530717U, -321333583U, -321137129U, -320941081U, -320744891U, -320551463U, -320355521U, -320159297U, -319962779U, -319766467U, -319571167U, -319375031U, -319180403U, -318982711U, -318785903U, -318589429U, -318393197U, -318196201U, -318000107U, -317805539U, -317609239U, -317414249U, -317218159U, -317021557U, -316825007U, -316630189U, -316434571U, -316240933U, -316042729U, -315846803U, -315650969U, -315456887U, -315260969U, -315064801U, -314867783U, -314671963U, -314475647U, -314281483U, -314084747U, -313889507U, -313693873U, -313499171U, -313301939U, -313106369U, -312911791U, -312714757U, -312520513U, -312326171U, -312130883U, -311935249U, -311740393U, -311544097U, -311348537U, -311150603U, -310954757U, -310760423U, -310565063U, -310367201U, -310172567U, -309976889U, -309780833U, -309585277U, -309390391U, -309194843U, -308999861U, -308803367U, -308608061U, -308414591U, -308219759U, -308025181U, -307831889U, -307635407U, -307438961U, -307243633U, -307049789U, -306853601U, -306659321U, -306462509U, -306268327U, -306071489U, -305877857U, -305682331U, -305488069U, -305293357U, -305095501U, -304900741U, -304706543U, -304511563U, -304317733U, -304123049U, -303926687U, -303730639U, -303533579U, -303337841U, -303142717U, -302947639U, -302751403U, -302556227U, -302360789U, -302164789U, -301969669U, -301774477U, -301578371U, -301384009U, -301189789U, -300993977U, -300799193U, -300604537U, -300409147U, -300214097U, -300018991U, -299824153U, -299630267U, -299435627U, -299240393U, -299045213U, -298849277U, -298652239U, -298456597U, -298263409U, -298066163U, -297872719U, -297677909U, -297481843U, -297285559U, -297091783U, -296897011U, -296700601U, -296505931U, -296311601U, -296116567U, -295921999U, -295726633U, -295531559U, -295336793U, -295140841U, -294942679U, -294748271U, -294553247U, -294359101U, -294165023U, -293968579U, -293776391U, -293581697U, -293386861U, -293190439U, -292996973U, -292800799U, -292605169U, -292409519U, -292215767U, -292021063U, -291827639U, -291633949U, -291437387U, -291242587U, -291048767U, -290854877U, -290661247U, -290463907U, -290269211U, -290071961U, -289876151U, -289683391U, -289489001U, -289295263U, -289099033U, -288904207U, -288709153U, -288515441U, -288322451U, -288125489U, -287931167U, -287736619U, -287540761U, -287346179U, -287151391U, -286959503U, -286764607U, -286568573U, -286374031U, -286178987U, -285983519U, -285789107U, -285594181U, -285399307U, -285205703U, -285008237U, -284812981U, -284618359U, -284422013U, -284227513U, -284032559U, -283836739U, -283642439U, -283449623U, -283255697U, -283058701U, -282864317U, -282669041U, -282475181U, -282280811U, -282085339U, -281889917U, -281695201U, -281500633U, -281306489U, -281113423U, -280918579U, -280723097U, -280528693U, -280334149U, -280141241U, -279946393U, -279751027U, -279560293U, -279365003U, -279170747U, -278975017U, -278780989U, -278585389U, -278389271U, -278195611U, -278001011U, -277805389U, -277611193U, -277419089U, -277225111U, -277029673U, -276835171U, -276644429U, -276448457U, -276252617U, -276058423U, -275863681U, -275669291U, -275475751U, -275281729U, -275088881U, -274894013U, -274697779U, -274504193U, -274310441U, -274117891U, -273924907U, -273730747U, -273535697U, -273342491U, -273147961U, -272953697U, -272758777U, -272564821U, -272371163U, -272178229U, -271982563U, -271787753U, -271595333U, -271400323U, -271206511U, -271009061U, -270814079U, -270619381U, -270427243U, -270232243U, -270036869U, -269844067U, -269647501U, -269451593U, -269257223U, -269063869U, -268870291U, -268676921U, -268483349U, -268290353U, -268094273U, -267900641U, -267707107U, -267513931U, -267318967U, -267123811U, -266929331U, -266735921U, -266541529U, -266344789U, -266149801U, -265955761U, -265762681U, -265568717U, -265376333U, -265184369U, -264990793U, -264798371U, -264604061U, -264408223U, -264215219U, -264021649U, -263825923U, -263631391U, -263435899U, -263239267U, -263046703U, -262852531U, -262658387U, -262464793U, -262271809U, -262080089U, -261886379U, -261692357U, -261498031U, -261306077U, -261112427U, -260918267U, -260725741U, -260532791U, -260338409U, -260144699U, -259950673U, -259756537U, -259560409U, -259367083U, -259174913U, -258980681U, -258786469U, -258593123U, -258399347U, -258205139U, -258011459U, -257818237U, -257623973U, -257431091U, -257237641U, -257044279U, -256853161U, -256658621U, -256462571U, -256266811U, -256073957U, -255879553U, -255687011U, -255493417U, -255301757U, -255107311U, -254913271U, -254719727U, -254527073U, -254334673U, -254141203U, -253946449U, -253754503U, -253559893U, -253366097U, -253173623U, -252979483U, -252786907U, -252591419U, -252398903U, -252204389U, -252012149U, -251819627U, -251622391U, -251429363U, -251237071U, -251043629U, -250851683U, -250658201U, -250465169U, -250271443U, -250077787U, -249883757U, -249690719U, -249497777U, -249303823U, -249110591U, -248917909U, -248722577U, -248531111U, -248338187U, -248146201U, -247953331U, -247759651U, -247565719U, -247371941U, -247179193U, -246985139U, -246791761U, -246598217U, -246406241U, -246212237U, -246018317U, -245824157U, -245630933U, -245437499U, -245244113U, -245050829U, -244859389U, -244669351U, -244476997U, -244284641U, -244092203U, -243896459U, -243703637U, -243509891U, -243316207U, -243123827U, -242930803U, -242737823U, -242542541U, -242349871U, -242155003U, -241962229U, -241768279U, -241573951U, -241381463U, -241187647U, -240994267U, -240802189U, -240609661U, -240417691U, -240225439U, -240033793U, -239840473U, -239647459U, -239455163U, -239262083U, -239068651U, -238874029U, -238681423U, -238488847U, -238295927U, -238103737U, -237912613U, -237719497U, -237528143U, -237335599U, -237142793U, -236950423U, -236759689U, -236566277U, -236372723U, -236180239U, -235988591U, -235796063U, -235601153U, -235409131U, -235218167U, -235025429U, -234833069U, -234642053U, -234449203U, -234255401U, -234063703U, -233870243U, -233675419U, -233483567U, -233289703U, -233095871U, -232901521U, -232711207U, -232517699U, -232323913U, -232130593U, -231937631U, -231744913U, -231553181U, -231360061U, -231167999U, -230975573U, -230782369U, -230591323U, -230400697U, -230206813U, -230014139U, -229822447U, -229631383U, -229437889U, -229244651U, -229050709U, -228859753U, -228667319U, -228474931U, -228283373U, -228091951U, -227898883U, -227705561U, -227510263U, -227318057U, -227125973U, -226933331U, -226741129U, -226549201U, -226356973U, -226164139U, -225972629U, -225781723U, -225588239U, -225395087U, -225201127U, -225008657U, -224817499U, -224623351U, -224430487U, -224238809U, -224047783U, -223854737U, -223660903U, -223470251U, -223278821U, -223088597U, -222898021U, -222703603U, -222513397U, -222320779U, -222128581U, -221936789U, -221745649U, -221553767U, -221359997U, -221169271U, -220977649U, -220785023U, -220592791U, -220400603U, -220207301U, -220014643U, -219822851U, -219630181U, -219437957U, -219245029U, -219053453U, -218861609U, -218669813U, -218477293U, -218283259U, -218092937U, -217902037U, -217708723U, -217515989U, -217323787U, -217133011U, -216939881U, -216748201U, -216554441U, -216362941U, -216171331U, -215979851U, -215787829U, -215595199U, -215402939U, -215211307U, -215019767U, -214829773U, -214638997U, -214447763U, -214255211U, -214063807U, -213871681U, -213679183U, -213484949U, -213293911U, -213101849U, -212911249U, -212719163U, -212526101U, -212335061U, -212143537U, -211951819U, -211758037U, -211566871U, -211375777U, -211184881U, -210993641U, -210801817U, -210609337U, -210416527U, -210224867U, -210032651U, -209840663U, -209650703U, -209460331U, -209269979U, -209078249U, -208885571U, -208694699U, -208503187U, -208309727U, -208118389U, -207925591U, -207734029U, -207542903U, -207352543U, -207161509U, -206968849U, -206778353U, -206587259U, -206395493U, -206205443U, -206012971U, -205821611U, -205629667U, -205438339U, -205246957U, -205056107U, -204863557U, -204673607U, -204481997U, -204291247U, -204098737U, -203907721U, -203717797U, -203524921U, -203334251U, -203142649U, -202952569U, -202762199U, -202569253U, -202376893U, -202185367U, -201993299U, -201804233U, -201612913U, -201420629U, -201230069U, -201038863U, -200847253U, -200655667U, -200466187U, -200271727U, -200082481U, -199893791U, -199701701U, -199509859U, -199319431U, -199128547U, -198937253U, -198745559U, -198554557U, -198365039U, -198174583U, -197981587U, -197790517U, -197598103U, -197405587U, -197214601U, -197022479U, -196832221U, -196641343U, -196450417U, -196258003U, -196065559U, -195875749U, -195684091U, -195493957U, -195301861U, -195110033U, -194920021U, -194730253U, -194538937U, -194348221U, -194157839U, -193967047U, -193777123U, -193586951U, -193397299U, -193205863U, -193014079U, -192823493U, -192634577U, -192444121U, -192253307U, -192063899U, -191872073U, -191680613U, -191488183U, -191296309U, -191105209U, -190913759U, -190722271U, -190531303U, -190340209U, -190148869U, -189959467U, -189768749U, -189578791U, -189386867U, -189195871U, -189006953U, -188817067U, -188626177U, -188434369U, -188243597U, -188051989U, -187862693U, -187672487U, -187479947U, -187290289U, -187101599U, -186909721U, -186718979U, -186529927U, -186340093U, -186149101U, -185957879U, -185767973U, -185576759U, -185386519U, -185196007U, -185006201U, -184815809U, -184626997U, -184437511U, -184248707U, -184057999U, -183868519U, -183677189U, -183489073U, -183299393U, -183108421U, -182919001U, -182726549U, -182535739U, -182343781U, -182154179U, -181962689U, -181771903U, -181582549U, -181390861U, -181200457U, -181010399U, -180818789U, -180628141U, -180437107U, -180246329U, -180056753U, -179865403U, -179677123U, -179488103U, -179298667U, -179108591U, -178917853U, -178729183U, -178538917U, -178348147U, -178156337U, -177967877U, -177779429U, -177589199U, -177399011U, -177208567U, -177020047U, -176829997U, -176641147U, -176450971U, -176261209U, -176070889U, -175881457U, -175690829U, -175501171U, -175312391U, -175124483U, -174934229U, -174744569U, -174553387U, -174362887U, -174173123U, -173984141U, -173793853U, -173603611U, -173414587U, -173225827U, -173036407U, -172846613U, -172655837U, -172466647U, -172276381U, -172087627U, -171897619U, -171708997U, -171518131U, -171328837U, -171140153U, -170951563U, -170762941U, -170571809U, -170381957U, -170191919U, -170004691U, -169814977U, -169624019U, -169434773U, -169248449U, -169058089U, -168869417U, -168679261U, -168490577U, -168301619U, -168112519U, -167921771U, -167733523U, -167543461U, -167355193U, -167165281U, -166977197U, -166787039U, -166597537U, -166409207U, -166221217U, -166031297U, -165842861U, -165653129U, -165462509U, -165272743U, -165083201U, -164893327U, -164702893U, -164514887U, -164325341U, -164135749U, -163945493U, -163758097U, -163569001U, -163380533U, -163193077U, -163003367U, -162815113U, -162625381U, -162435659U, -162247079U, -162058889U, -161868769U, -161679187U, -161490583U, -161299297U, -161109331U, -160920703U, -160733017U, -160544453U, -160355989U, -160166753U, -159978367U, -159790819U, -159601727U, -159412639U, -159223517U, -159034937U, -158847659U, -158657761U, -158466983U, -158277827U, -158087929U, -157899923U, -157711129U, -157521739U, -157333247U, -157144913U, -156955559U, -156766583U, -156578579U, -156389789U, -156200969U, -156012877U, -155824663U, -155635999U, -155449181U, -155259329U, -155071097U, -154882151U, -154692103U, -154504913U, -154316737U, -154127989U, -153937877U, -153750617U, -153563087U, -153374737U, -153184901U, -152998253U, -152808611U, -152622137U, -152433731U, -152244559U, -152054831U, -151864819U, -151676659U, -151488713U, -151299593U, -151112447U, -150922319U, -150734347U, -150543803U, -150355943U, -150167639U, -149979413U, -149790647U, -149602613U, -149414519U, -149226059U, -149036633U, -148848053U, -148660459U, -148473037U, -148284233U, -148095697U, -147908051U, -147719849U, -147530927U, -147342497U, -147154583U, -146967131U, -146779973U, -146592161U, -146404283U, -146215987U, -146028829U, -145840997U, -145653953U, -145465849U, -145277879U, -145088759U, -144900647U, -144710743U, -144522883U, -144335641U, -144148133U, -143960009U, -143772731U, -143584663U, -143397817U, -143211583U, -143023403U, -142836769U, -142649069U, -142460501U, -142273903U, -142086817U, -141901079U, -141713353U, -141526009U, -141337631U, -141150731U, -140963029U, -140773079U, -140585771U, -140397097U, -140208613U, -140020883U, -139833637U, -139647301U, -139459559U, -139273223U, -139084727U, -138896581U, -138710941U, -138523223U, -138335569U, -138146971U, -137958407U, -137770219U, -137581757U, -137396477U, -137209543U, -137020991U, -136832713U, -136645373U, -136459727U, -136273777U, -136085947U, -135898517U, -135710527U, -135521381U, -135334181U, -135146093U, -134959613U, -134773459U, -134586799U, -134399621U, -134213483U, -134026553U, -133838149U, -133651027U, -133462151U, -133276543U, -133087957U, -132901367U, -132714497U, -132526507U, -132339761U, -132152729U, -131965111U, -131777039U, -131591081U, -131403011U, -131217089U, -131030267U, -130844327U, -130658131U, -130471373U, -130284131U, -130096721U, -129908039U, -129720413U, -129533941U, -129348269U, -129161959U, -128974297U, -128787667U, -128603047U, -128417117U, -128229061U, -128042461U, -127856539U, -127670819U, -127482731U, -127296359U, -127108343U, -126923837U, -126736237U, -126549919U, -126363241U, -126176537U, -125990521U, -125804839U, -125619577U, -125431459U, -125245501U, -125059483U, -124873351U, -124686977U, -124499801U, -124313051U, -124128931U, -123941581U, -123756023U, -123570427U, -123384229U, -123198661U, -123012431U, -122825713U, -122640377U, -122453621U, -122265487U, -122079197U, -121893817U, -121707613U, -121521013U, -121334561U, -121148387U, -120964253U, -120777233U, -120590153U, -120403117U, -120216113U, -120030817U, -119846431U, -119659843U, -119473723U, -119288087U, -119101837U, -118913621U, -118726159U, -118540469U, -118355789U, -118168691U, -117983309U, -117797447U, -117610693U, -117426377U, -117239467U, -117053617U, -116868613U, -116680763U, -116495963U, -116310731U, -116124461U, -115940059U, -115755071U, -115570151U, -115383889U, -115197619U, -115012217U, -114826507U, -114639611U, -114453901U, -114268459U, -114083461U, -113896997U, -113710601U, -113523551U, -113337607U, -113151163U, -112968187U, -112781413U, -112597567U, -112410863U, -112224869U, -112041313U, -111856057U, -111671939U, -111485417U, -111300359U, -111113659U, -110927723U, -110742817U, -110558197U, -110373097U, -110185429U, -110000207U, -109816123U, -109631227U, -109445953U, -109261027U, -109076729U, -108891301U, -108706319U, -108520781U, -108338011U, -108154273U, -107969483U, -107783167U, -107599229U, -107414033U, -107229569U, -107045951U, -106860881U, -106674979U, -106491023U, -106305917U, -106121371U, -105936421U, -105751201U, -105566597U, -105380491U, -105195661U, -105011527U, -104826877U, -104640791U, -104456647U, -104271161U, -104088581U, -103905899U, -103720889U, -103535363U, -103351607U, -103166803U, -102982193U, -102797509U, -102611801U, -102428533U, -102245177U, -102061153U, -101878417U, -101693441U, -101508191U, -101324557U, -101140019U, -100957291U, -100772813U, -100587523U, -100402817U, -100217561U, -100034317U, -99851249U, -99665549U, -99482633U, -99298943U, -99112829U, -98929081U, -98743261U, -98558099U, -98374879U, -98191759U, -98006033U, -97821839U, -97638559U, -97456841U, -97272631U, -97087433U, -96904513U, -96719809U, -96537893U, -96353401U, -96168011U, -95983787U, -95801747U, -95616853U, -95433263U, -95249807U, -95066039U, -94883111U, -94700833U, -94516717U, -94333933U, -94149721U, -93966659U, -93784181U, -93599687U, -93415661U, -93232427U, -93049301U, -92863711U, -92681111U, -92497303U, -92313943U, -92129753U, -91947211U, -91761893U, -91580219U, -91395749U, -91213127U, -91030321U, -90846887U, -90664879U, -90480161U, -90297667U, -90115583U, -89933297U, -89749379U, -89564353U, -89380243U, -89196911U, -89014231U, -88831753U, -88648711U, -88464433U, -88281301U, -88099309U, -87918041U, -87735311U, -87551473U, -87368143U, -87185521U, -87002527U, -86819059U, -86635727U, -86454139U, -86271967U, -86087539U, -85905473U, -85723789U, -85539823U, -85358417U, -85175957U, -84992489U, -84809147U, -84626603U, -84444043U, -84260999U, -84077507U, -83895419U, -83714789U, -83531321U, -83348579U, -83165221U, -82982057U, -82800373U, -82619401U, -82436671U, -82253887U, -82070687U, -81889261U, -81706409U, -81524419U, -81342557U, -81159839U, -80980007U, -80798779U, -80617753U, -80435371U, -80253763U, -80072779U, -79888511U, -79706771U, -79525021U, -79343701U, -79161149U, -78979279U, -78796441U, -78615211U, -78433877U, -78250223U, -78068383U, -77887133U, -77705807U, -77523223U, -77341399U, -77159333U, -76977959U, -76797257U, -76614667U, -76431583U, -76249919U, -76067633U, -75886747U, -75706193U, -75523937U, -75343739U, -75163607U, -74982307U, -74800723U, -74619133U, -74438183U, -74256739U, -74075017U, -73892317U, -73710739U, -73531123U, -73349173U, -73168181U, -72986443U, -72806519U, -72624863U, -72443671U, -72262847U, -72083749U, -71902819U, -71721367U, -71540317U, -71360867U, -71180273U, -70999073U, -70818323U, -70636019U, -70455323U, -70275589U, -70095271U, -69913423U, -69732599U, -69552737U, -69373621U, -69192857U, -69011251U, -68831857U, -68650541U, -68469409U, -68288557U, -68108351U, -67927511U, -67746827U, -67567627U, -67387867U, -67208347U, -67028069U, -66848311U, -66666751U, -66487507U, -66307727U, -66128837U, -65950439U, -65770451U, -65589409U, -65410649U, -65230259U, -65049041U, -64870343U, -64688747U, -64507787U, -64327903U, -64147561U, -63968063U, -63789757U, -63610199U, -63430931U, -63251467U, -63071809U, -62892839U, -62713073U, -62532517U, -62352571U, -62173597U, -61994887U, -61815977U, -61636231U, -61456183U, -61275419U, -61094951U, -60915853U, -60737837U, -60559241U, -60379751U, -60201523U, -60021539U, -59841973U, -59663497U, -59484767U, -59305187U, -59125333U, -58945219U, -58767607U, -58589033U, -58410523U, -58231967U, -58052879U, -57873817U, -57694499U, -57514829U, -57335981U, -57158411U, -56980423U, -56800753U, -56624527U, -56446043U, -56266219U, -56088649U, -55910791U, -55732351U, -55555231U, -55376369U, -55197721U, -55019897U, -54841331U, -54662059U, -54485107U, -54306403U, -54126781U, -53949167U, -53770853U, -53593171U, -53413639U, -53235829U, -53058007U, -52880033U, -52702613U, -52525171U, -52347107U, -52168973U, -51990767U, -51813187U, -51636499U, -51458861U, -51281453U, -51104257U, -50925361U, -50748149U, -50570687U, -50394067U, -50216953U, -50039263U, -49861883U, -49684643U, -49508111U, -49332421U, -49155797U, -48978451U, -48802009U, -48623479U, -48446927U, -48269713U, -48092383U, -47913799U, -47737211U, -47559517U, -47382877U, -47205551U, -47028899U, -46852483U, -46675831U, -46499939U, -46323493U, -46146389U, -45969251U, -45792757U, -45616187U, -45441163U, -45266317U, -45089893U, -44914523U, -44738009U, -44563219U, -44387113U, -44210707U, -44034449U, -43858921U, -43682351U, -43505453U, -43330681U, -43154911U, -42978773U, -42801313U, -42625673U, -42449963U, -42274433U, -42100169U, -41923451U, -41748299U, -41572033U, -41396093U, -41219881U, -41044891U, -40868299U, -40695289U, -40518707U, -40343419U, -40168781U, -39994211U, -39817907U, -39642653U, -39468991U, -39294637U, -39120883U, -38945273U, -38772131U, -38597917U, -38422801U, -38249219U, -38075273U, -37901167U, -37725713U, -37551001U, -37377479U, -37201921U, -37029367U, -36854551U, -36679801U, -36505093U, -36330773U, -36157423U, -35984339U, -35809141U, -35635627U, -35461177U, -35287939U, -35114207U, -34939903U, -34767391U, -34591933U, -34418939U, -34244071U, -34069129U, -33893689U, -33721511U, -33548077U, -33374401U, -33202313U, -33028577U, -32856277U, -32682743U, -32509907U, -32337311U, -32163991U, -31991731U, -31819127U, -31646471U, -31473479U, -31300459U, -31127519U, -30953453U, -30781319U, -30609311U, -30437177U, -30265159U, -30092813U, -29922733U, -29750759U, -29579519U, -29406439U, -29235953U, -29062879U, -28890787U, -28718537U, -28546591U, -28374859U, -28204291U, -28031611U, -27861667U, -27689833U, -27518653U, -27347557U, -27174779U, -27004343U, -26834293U, -26662327U, -26491921U, -26321989U, -26150171U, -25979521U, -25809083U, -25638607U, -25468039U, -25298069U, -25124909U, -24955681U, -24783713U, -24614839U, -24444313U, -24274847U, -24105251U, -23935453U, -23765431U, -23595163U, -23425559U, -23256053U, -23085833U, -22916461U, -22747187U, -22578419U, -22409393U, -22239713U, -22068143U, -21900377U, -21731779U, -21563219U, -21394229U, -21226157U, -21056153U, -20887649U, -20718781U, -20551697U, -20382253U, -20213983U, -20045197U, -19878041U, -19710289U, -19541903U, -19374079U, -19206023U, -19038311U, -18870161U, -18703387U, -18536303U, -18368221U, -18201941U, -18033391U, -17866619U, -17699107U, -17532169U, -17366749U, -17201039U, -17032781U, -16867867U, -16702099U, -16535639U, -16369853U, -16203367U, -16036523U, -15870383U, -15705071U, -15539987U, -15374041U, -15208997U, -15042919U, -14876951U, -14712427U, -14547283U, -14382007U, -14218571U, -14053619U, -13887953U, -13724233U, -13560847U, -13395559U, -13231343U, -13067423U, -12902137U, -12738433U, -12575881U, -12411409U, -12249493U, -12086059U, -11923057U, -11760059U, -11597701U, -11435887U, -11272697U, -11109827U, -10947941U, -10786267U, -10624787U, -10463443U, -10302407U, -10140307U, -9979111U, -9817057U, -9655759U, -9495601U, -9334487U, -9174793U, -9014101U, -8853359U, -8693653U, -8534489U, -8375273U, -8215633U, -8056423U, -7896949U, -7738559U, -7580459U, -7421383U, -7263143U, -7104341U, -6947753U, -6791437U, -6633877U, -6477301U, -6319483U, -6163567U, -6007247U, -5851717U, -5695831U, -5539363U, -5383601U, -5229331U, -5074633U, -4920613U, -4766999U, -4613237U, -4459951U, -4307453U, -4154791U, -4002547U, -3849943U, -3698881U, -3548471U, -3396661U, -3246119U, -3097141U, -2948161U, -2799451U, -2650931U, -2503597U, -2356573U, -2209499U, -2063573U, -1918439U, -1774937U, -1630987U, -1488133U, -1346567U, -1205653U, -1066909U, -927853U, -791447U, -656683U, -523417U, -393073U, -266083U, -143687U -}; +unsigned int prime_list_64[PRIMELISTSIZE2] = + { 3037000493U, 3037000453U, 3037000429U, 3037000427U, 3037000399U, + 3037000391U, 3037000333U, 3037000331U, 3037000303U, 3037000289U, + 3037000249U, 3037000193U, 3037000181U, 3037000177U, 3037000159U, + 3037000121U, 3037000111U, 3037000103U, 3037000069U, 3037000039U, + 3037000013U, 3036999991U, 3036999983U, 3036999941U, 3036999899U, + 3036999887U, 3036999877U, 3036999841U, 3036999821U, 3036999817U, + 3036999811U, 3036999803U, 3036999773U, 3036999769U, 3036999761U, + 3036999739U, 3036999737U, 3036999733U, 3036999727U, 3036999499U, + 3036999487U, 3036999473U, 3036999467U, 3036999457U, 3036999443U, + 3036999439U, 3036999431U, 3036999403U, 3036999379U, 3036999341U, + 3036999319U, 3036999307U, 3036999293U, 3036999283U, 3036999271U, + 3036999233U, 3036999209U, 3036999167U, 3036999157U, 3036999137U, + 3036999113U, 3036999101U, 3036999089U, 3036999079U, 3036999067U, + 3036999061U, 3036999023U, 3036999019U, 3036999001U, 3036998999U, + 3036998989U, 3036998977U, 3036998963U, 3036998957U, 3036998933U, + 3036998903U, 3036998873U, 3036998857U, 3036998849U, 3036998843U, + 3036998837U, 3036998803U, 3036998777U, 3036998761U, 3036998759U, + 3036998743U, 3036998717U, 3036998611U, 3036998599U, 3036998567U, + 3036998563U, 3036998561U, 3036998537U, 3036998477U, 3036998449U, + 3036998429U, 3036998401U, 3036998381U, 3036998347U, 3036998333U, + 3036998329U, 3036998299U, 3036998267U, 3036998257U, 3036998249U, + 3036998231U, 3036998213U, 3036998183U, 3036998161U, 3036998113U, + 3036998093U, 3036998071U, 3036998051U, 3036998047U, 3036998011U, + 3036998009U, 3036997973U, 3036997939U, 3036997933U, 3036997897U, + 3036997853U, 3036997837U, 3036997813U, 3036997811U, 3036997787U, + 3036997783U, 3036997751U, 3036997741U, 3036997727U, 3036997721U, + 3036997709U, 3036997697U, 3036997693U, 3036997643U, 3036997631U, + 3036997619U, 3036997603U, 3036997597U, 3036997577U, 3036997559U, + 3036997511U, 3036997501U, 3036997493U, 3036997393U, 3036997391U, + 3036997343U, 3036997339U, 3036997331U, 3036997289U, 3036997279U, + 3036997217U, 3036997213U, 3036997169U, 3036997151U, 3036997133U, + 3036997109U, 3036997081U, 3036997063U, 3036997021U, 3036996983U, + 3036996947U, 3036996931U, 3036996923U, 3036996901U, 3036996883U, + 3036996863U, 3036996829U, 3036996817U, 3036996799U, 3036996769U, + 3036996761U, 3036996737U, 3036996713U, 3036996709U, 3036996707U, + 3036996673U, 3036996631U, 3036996601U, 3036996587U, 3036996553U, + 3036996527U, 3036996497U, 3036996491U, 3036996481U, 3036996451U, + 3036996439U, 3036996421U, 3036996379U, 3036996373U, 3036996353U, + 3036996349U, 3036996329U, 3036996307U, 3036996299U, 3036996283U, + 3036996253U, 3036996247U, 3036996211U, 3036996197U, 3036996121U, + 3036996091U, 3036996077U, 3036996071U, 3036996049U, 3036996019U, + 3036996013U, 3036995981U, 3036995977U, 3036995953U, 3036995933U, + 3036995921U, 3036995909U, 3036995893U, 3036995887U, 3036995881U, + 3036995867U, 3036995839U, 3036995833U, 3036995827U, 3036995791U, + 3036995761U, 3036995737U, 3036995723U, 3036995711U, 3036995671U, + 3036995641U, 3036995627U, 3036995609U, 3036995603U, 3036995581U, + 3036995579U, 3036995573U, 3036995543U, 3036995531U, 3036995527U, + 3036995491U, 3036995477U, 3036995459U, 3036995369U, 3036995281U, + 3036995267U, 3036995257U, 3036995249U, 3036995239U, 3036995189U, + 3036995161U, 3036995153U, 3036995123U, 3036995089U, 3036995083U, + 3036995057U, 3036995051U, 3036995041U, 3036995021U, 3036994997U, + 3036994963U, 3036994931U, 3036994921U, 3036994897U, 3036994889U, + 3036994879U, 3036994847U, 3036994799U, 3036994787U, 3036994777U, + 3036994747U, 3036994717U, 3036994703U, 3036994679U, 3036994673U, + 3036994663U, 3036994661U, 3036994627U, 3036994621U, 3036994619U, + 3036994591U, 3036994549U, 3036994547U, 3036994531U, 3036994511U, + 3036994507U, 3036994489U, 3036994469U, 3036994439U, 3036994423U, + 3036994417U, 3036994397U, 3036994381U, 3036994369U, 3036994349U, + 3036994327U, 3036994309U, 3036994283U, 3036994249U, 3036994237U, + 3036994229U, 3036994211U, 3036994193U, 3036994141U, 3036994099U, + 3036994073U, 3036994069U, 3036994063U, 3036994043U, 3036994039U, + 3036994033U, 3036994001U, 3036993977U, 3036993937U, 3036993913U, + 3036993901U, 3036993893U, 3036993871U, 3036993769U, 3036993737U, + 3036993727U, 3036993719U, 3036993677U, 3036993667U, 3036993613U, + 3036993607U, 3036993601U, 3036993587U, 3036993571U, 3036993569U, + 3036993541U, 3036993539U, 3036993529U, 3036993527U, 3036993511U, + 3036993469U, 3036993437U, 3036993413U, 3036993367U, 3036993359U, + 3036993331U, 3036993329U, 3036993319U, 3036993283U, 3036993277U, + 3036993257U, 3036993251U, 3036993241U, 3036993233U, 3036993221U, + 3036993217U, 3036993181U, 3036993161U, 3036993143U, 3036993133U, + 3036993131U, 3036993107U, 3036993103U, 3036993097U, 3036993083U, + 3036993077U, 3036993073U, 3036993023U, 3036992983U, 3036992977U, + 3036992969U, 3036992957U, 3036992953U, 3036992921U, 3036992899U, + 3036992879U, 3036992873U, 3036992869U, 3036992809U, 3036992773U, + 3036992753U, 3036992747U, 3036992743U, 3036992741U, 3036992731U, + 3036992719U, 3036992711U, 3036992701U, 3036992681U, 3036992669U, + 3036992639U, 3036992579U, 3036992521U, 3036992507U, 3036992503U, + 3036992461U, 3036992437U, 3036992423U, 3036992401U, 3036992383U, + 3036992377U, 3036992341U, 3036992333U, 3036992293U, 3036992291U, + 3036992249U, 3036992207U, 3036992191U, 3036992141U, 3036992131U, + 3036992113U, 3036992087U, 3036992083U, 3036992069U, 3036992051U, + 3036992033U, 3036992017U, 3036992011U, 3036991987U, 3036991981U, + 3036991949U, 3036991943U, 3036991897U, 3036991891U, 3036991883U, + 3036991861U, 3036991777U, 3036991757U, 3036991753U, 3036991747U, + 3036991717U, 3036991649U, 3036991627U, 3036991619U, 3036991591U, + 3036991543U, 3036991511U, 3036991501U, 3036991481U, 3036991453U, + 3036991381U, 3036991361U, 3036991357U, 3036991327U, 3036991303U, + 3036991301U, 3036991271U, 3036991261U, 3036991253U, 3036991249U, + 3036991247U, 3036991189U, 3036991183U, 3036991171U, 3036991147U, + 3036991127U, 3036991109U, 3036991081U, 3036991063U, 3036991049U, + 3036991037U, 3036991033U, 3036991031U, 3036991021U, 3036990997U, + 3036990977U, 3036990961U, 3036990949U, 3036990923U, 3036990907U, + 3036990899U, 3036990893U, 3036990871U, 3036990851U, 3036990829U, + 3036990779U, 3036990769U, 3036990763U, 3036990739U, 3036990727U, + 3036990709U, 3036990703U, 3036990611U, 3036990559U, 3036990491U, + 3036990431U, 3036990421U, 3036990401U, 3036990391U, 3036990379U, + 3036990371U, 3036990323U, 3036990317U, 3036990277U, 3036990263U, + 3036990247U, 3036990233U, 3036990227U, 3036990199U, 3036990193U, + 3036990167U, 3036990163U, 3036990157U, 3036990071U, 3036990059U, + 3036990049U, 3036990037U, 3036990029U, 3036990017U, 3036989999U, + 3036989993U, 3036989983U, 3036989957U, 3036989863U, 3036989821U, + 3036989797U, 3036989779U, 3036989723U, 3036989693U, 3036989687U, + 3036989651U, 3036989611U, 3036989609U, 3036989603U, 3036989573U, + 3036989561U, 3036989539U, 3036989477U, 3036989471U, 3036989441U, + 3036989419U, 3036989381U, 3036989377U, 3036989363U, 3036989357U, + 3036989353U, 3036989323U, 3036989297U, 3036989281U, 3036989261U, + 3036989209U, 3036989167U, 3036989159U, 3036989149U, 3036989129U, + 3036989107U, 3036989101U, 3036989077U, 3036989071U, 3036989063U, + 3036989041U, 3036989027U, 3036988991U, 3036988879U, 3036988849U, + 3036988819U, 3036988751U, 3036988739U, 3036988729U, 3036988727U, + 3036988723U, 3036988699U, 3036988679U, 3036988673U, 3036988667U, + 3036988651U, 3036988637U, 3036988631U, 3036988627U, 3036988583U, + 3036988573U, 3036988571U, 3036988543U, 3036988523U, 3036988483U, + 3036988469U, 3036988429U, 3036988417U, 3036988399U, 3036988397U, + 3036988393U, 3036988387U, 3036988369U, 3036988349U, 3036988319U, + 3036988313U, 3036988309U, 3036988301U, 3036988277U, 3036988271U, + 3036988117U, 3036988111U, 3036988109U, 3036988081U, 3036988079U, + 3036988043U, 3036988037U, 3036988027U, 3036988021U, 3036987991U, + 3036987979U, 3036987937U, 3036987931U, 3036987929U, 3036987917U, + 3036987913U, 3036987901U, 3036987883U, 3036987871U, 3036987809U, + 3036987799U, 3036987773U, 3036987743U, 3036987731U, 3036987727U, + 3036987719U, 3036987691U, 3036987659U, 3036987637U, 3036987631U, + 3036987601U, 3036987589U, 3036987587U, 3036987581U, 3036987563U, + 3036987557U, 3036987553U, 3036987533U, 3036987529U, 3036987523U, + 3036987521U, 3036987469U, 3036987439U, 3036987427U, 3036987361U, + 3036987337U, 3036987319U, 3036987311U, 3036987293U, 3036987251U, + 3036987241U, 3036987197U, 3036987167U, 3036987127U, 3036987089U, + 3036987077U, 3036987073U, 3036987067U, 3036987061U, 3036987043U, + 3036986969U, 3036986957U, 3036986917U, 3036986881U, 3036986863U, + 3036986851U, 3036986839U, 3036986803U, 3036986791U, 3036986789U, + 3036986767U, 3036986759U, 3036986737U, 3036986713U, 3036986669U, + 3036986609U, 3036986599U, 3036986593U, 3036986569U, 3036986509U, + 3036986507U, 3036986501U, 3036986479U, 3036986441U, 3036986431U, + 3036986417U, 3036986411U, 3036986383U, 3036986333U, 3036986287U, + 3036986279U, 3036986203U, 3036986189U, 3036986167U, 3036986129U, + 3036986123U, 3036986107U, 3036986041U, 3036986023U, 3036986009U, + 3036985999U, 3036985993U, 3036985979U, 3036985949U, 3036985921U, + 3036985877U, 3036985873U, 3036985837U, 3036985829U, 3036985817U, + 3036985813U, 3036985799U, 3036985771U, 3036985753U, 3036985747U, + 3036985741U, 3036985739U, 3036985733U, 3036985729U, 3036985709U, + 3036985697U, 3036985673U, 3036985643U, 3036985613U, 3036985607U, + 3036985603U, 3036985583U, 3036985561U, 3036985559U, 3036985547U, + 3036985543U, 3036985499U, 3036985459U, 3036985439U, 3036985433U, + 3036985409U, 3036985373U, 3036985361U, 3036985309U, 3036985291U, + 3036985283U, 3036985267U, 3036985253U, 3036985249U, 3036985219U, + 3036985207U, 3036985187U, 3036985177U, 3036985151U, 3036985097U, + 3036985093U, 3036985073U, 3036985033U, 3036985031U, 3036985001U, + 3036984997U, 3036984989U, 3036984971U, 3036984953U, 3036984943U, + 3036984917U, 3036984887U, 3036984803U, 3036984799U, 3036984787U, + 3036984773U, 3036984761U, 3036984751U, 3036984749U, 3036984721U, + 3036984697U, 3036984673U, 3036984667U, 3036984637U, 3036984623U, + 3036984589U, 3036984569U, 3036984563U, 3036984539U, 3036984527U, + 3036984481U, 3036984479U, 3036984427U, 3036984421U, 3036984413U, + 3036984407U, 3036984403U, 3036984373U, 3036984367U, 3036984361U, + 3036984343U, 3036984319U, 3036984287U, 3036984259U, 3036984257U, + 3036984253U, 3036984199U, 3036984191U, 3036984151U, 3036984133U, + 3036984131U, 3036984089U, 3036984059U, 3036984053U, 3036984047U, + 3036984017U, 3036983933U, 3036983923U, 3036983909U, 3036983897U, + 3036983867U, 3036983843U, 3036983837U, 3036983827U, 3036983813U, + 3036983809U, 3036983777U, 3036983771U, 3036983699U, 3036983689U, + 3036983671U, 3036983657U, 3036983629U, 3036983623U, 3036983597U, + 3036983567U, 3036983561U, 3036983539U, 3036983533U, 3036983497U, + 3036983483U, 3036983441U, 3036983407U, 3036983387U, 3036983297U, + 3036983281U, 3036983249U, 3036983203U, 3036983189U, 3036983177U, + 3036983167U, 3036983137U, 3036983111U, 3036983099U, 3036983083U, + 3036983063U, 3036983057U, 3036983041U, 3036982981U, 3036982937U, + 3036982919U, 3036982853U, 3036982843U, 3036982841U, 3036982789U, + 3036982777U, 3036982757U, 3036982727U, 3036982693U, 3036982643U, + 3036982639U, 3036982601U, 3036982589U, 3036982577U, 3036982567U, + 3036982547U, 3036982541U, 3036982523U, 3036982519U, 3036982489U, + 3036982469U, 3036982451U, 3036982423U, 3036982397U, 3036982387U, + 3036982349U, 3036982337U, 3036982331U, 3036982313U, 3036982297U, + 3036982279U, 3036982271U, 3036982189U, 3036982139U, 3036982133U, + 3036982121U, 3036982111U, 3036982103U, 3036982099U, 3036982093U, + 3036982061U, 3036982043U, 3036982009U, 3036982001U, 3036981979U, + 3036981967U, 3036981953U, 3036981931U, 3036981923U, 3036981917U, + 3036981863U, 3036981859U, 3036981853U, 3036981851U, 3036981821U, + 3036981811U, 3036981797U, 3036981763U, 3036981733U, 3036981713U, + 3036981691U, 3036981659U, 3036981553U, 3036981547U, 3036981539U, + 3036981533U, 3036981481U, 3036981421U, 3036981407U, 3036981401U, + 3036981383U, 3036981373U, 3036981359U, 3036981347U, 3036981323U, + 3036981313U, 3036981307U, 3036981301U, 3036981289U, 3036981287U, + 3036981209U, 3036981179U, 3036981139U, 3036981097U, 3036981067U, + 3036981043U, 3036981041U, 3036981023U, 3036981011U, 3036980971U, + 3036980941U, 3036980917U, 3036980911U, 3036980897U, 3036980867U, + 3036980851U, 3036980819U, 3036980803U, 3036980761U, 3036980753U, + 3036980747U, 3036980701U, 3036980699U, 3036980677U, 3036980599U, + 3036980579U, 3036980549U, 3036980537U, 3036980533U, 3036980519U, + 3036980497U, 3036980491U, 3036980459U, 3036980423U, 3036980371U, + 3036980363U, 3036980339U, 3036980327U, 3036980269U, 3036980267U, + 3036980263U, 3036980207U, 3036980161U, 3036980129U, 3036980123U, + 3036980117U, 3036980077U, 3036980071U, 3036980047U, 3036980041U, + 3036980039U, 3036980033U, 3036980027U, 3036979997U, 3036979987U, + 3036979937U, 3036979927U, 3036979919U, 3036979873U, 3036979861U, + 3036979849U, 3036979837U, 3036979793U, 3036979787U, 3036979769U, + 3036979763U, 3036979723U, 3036979709U, 3036979679U, 3036979661U, + 3036979601U, 3036979597U, 3036979579U, 3036979571U, 3036979531U, + 3036979529U, 3036979523U, 3036979457U, 3036979391U, 3036979357U, + 3036979343U, 3036979339U, 3036979303U, 3036979301U, 3036979291U, + 3036979289U, 3036979261U, 3036979249U, 3036979237U, 3036979223U, + 3036762997U, 3036545581U, 3036327389U, 3036107951U, 3035888633U, + 3035669363U, 3035449477U, 3035232667U, 3035014193U, 3034795427U, + 3034577531U, 3034357853U, 3034138969U, 3033923621U, 3033706409U, + 3033488597U, 3033267889U, 3033049871U, 3032832493U, 3032615063U, + 3032396527U, 3032177359U, 3031960339U, 3031742731U, 3031526081U, + 3031308359U, 3031092199U, 3030873071U, 3030655757U, 3030437257U, + 3030218647U, 3029999191U, 3029780833U, 3029559389U, 3029339741U, + 3029122153U, 3028904231U, 3028687897U, 3028467803U, 3028251181U, + 3028034189U, 3027815579U, 3027597247U, 3027377317U, 3027158237U, + 3026939441U, 3026721421U, 3026502179U, 3026282261U, 3026065561U, + 3025847507U, 3025627663U, 3025409689U, 3025190813U, 3024971231U, + 3024753383U, 3024533179U, 3024312673U, 3024094123U, 3023876753U, + 3023655737U, 3023439317U, 3023222239U, 3023004151U, 3022786831U, + 3022566857U, 3022349243U, 3022131979U, 3021911663U, 3021695137U, + 3021477377U, 3021256289U, 3021037769U, 3020820247U, 3020600897U, + 3020381843U, 3020165179U, 3019948573U, 3019729819U, 3019510561U, + 3019294087U, 3019074679U, 3018854257U, 3018637471U, 3018418159U, + 3018199469U, 3017981123U, 3017762807U, 3017544701U, 3017327809U, + 3017107381U, 3016890403U, 3016671503U, 3016453117U, 3016234721U, + 3016015661U, 3015797003U, 3015579211U, 3015360779U, 3015141427U, + 3014924197U, 3014705597U, 3014487473U, 3014268743U, 3014052511U, + 3013832473U, 3013615529U, 3013397269U, 3013177819U, 3012960241U, + 3012743291U, 3012525497U, 3012307019U, 3012088889U, 3011870993U, + 3011652491U, 3011434169U, 3011217061U, 3010999219U, 3010780781U, + 3010564993U, 3010348387U, 3010127833U, 3009910177U, 3009693839U, + 3009474253U, 3009255637U, 3009037517U, 3008820911U, 3008599381U, + 3008379739U, 3008159723U, 3007941473U, 3007724221U, 3007506361U, + 3007288589U, 3007068709U, 3006850277U, 3006630499U, 3006412979U, + 3006194489U, 3005975761U, 3005755367U, 3005537413U, 3005317433U, + 3005101609U, 3004884821U, 3004669463U, 3004450633U, 3004231093U, + 3004011743U, 3003795953U, 3003576871U, 3003357971U, 3003138847U, + 3002919079U, 3002700947U, 3002481649U, 3002264299U, 3002046821U, + 3001828987U, 3001609753U, 3001390789U, 3001172389U, 3000954289U, + 3000736049U, 3000517057U, 3000299059U, 3000081691U, 2999865541U, + 2999645267U, 2999428681U, 2999208437U, 2998989517U, 2998769261U, + 2998552309U, 2998331761U, 2998112737U, 2997895037U, 2997675017U, + 2997456079U, 2997236027U, 2997018683U, 2996799863U, 2996579689U, + 2996360473U, 2996141653U, 2995922999U, 2995706647U, 2995488203U, + 2995270471U, 2995052131U, 2994832817U, 2994613397U, 2994394969U, + 2994176371U, 2993958943U, 2993739953U, 2993521463U, 2993302891U, + 2993085449U, 2992867159U, 2992647499U, 2992428287U, 2992211983U, + 2991996857U, 2991776339U, 2991556427U, 2991341417U, 2991121901U, + 2990904949U, 2990686943U, 2990471509U, 2990252131U, 2990033617U, + 2989816859U, 2989597759U, 2989377431U, 2989159883U, 2988940987U, + 2988721301U, 2988502883U, 2988285617U, 2988066629U, 2987849437U, + 2987630771U, 2987414873U, 2987198597U, 2986980923U, 2986764181U, + 2986545649U, 2986327571U, 2986109209U, 2985890657U, 2985670433U, + 2985453733U, 2985237617U, 2985019019U, 2984801321U, 2984581697U, + 2984360947U, 2984142757U, 2983925299U, 2983708313U, 2983488721U, + 2983270751U, 2983052749U, 2982833473U, 2982617243U, 2982401029U, + 2982184763U, 2981967419U, 2981746181U, 2981525629U, 2981308009U, + 2981089733U, 2980871129U, 2980654093U, 2980435439U, 2980218091U, + 2980002373U, 2979781547U, 2979562793U, 2979344219U, 2979127687U, + 2978907857U, 2978690389U, 2978472713U, 2978255261U, 2978038267U, + 2977818317U, 2977601191U, 2977384337U, 2977166617U, 2976948059U, + 2976730721U, 2976512857U, 2976292927U, 2976075541U, 2975857043U, + 2975638751U, 2975421623U, 2975204087U, 2974987151U, 2974768619U, + 2974552081U, 2974332671U, 2974113341U, 2973895261U, 2973677171U, + 2973458113U, 2973241703U, 2973023369U, 2972804099U, 2972586329U, + 2972367829U, 2972149039U, 2971931051U, 2971711019U, 2971494139U, + 2971277423U, 2971059173U, 2970838919U, 2970619343U, 2970403757U, + 2970183743U, 2969959627U, 2969743547U, 2969525033U, 2969309891U, + 2969090279U, 2968871251U, 2968651541U, 2968435117U, 2968214531U, + 2967996443U, 2967780931U, 2967562369U, 2967343021U, 2967124487U, + 2966906353U, 2966688983U, 2966472557U, 2966253179U, 2966035691U, + 2965819673U, 2965600733U, 2965383739U, 2965166959U, 2964946847U, + 2964729197U, 2964510889U, 2964292297U, 2964075437U, 2963855227U, + 2963638693U, 2963421677U, 2963204119U, 2962986503U, 2962766491U, + 2962547311U, 2962331657U, 2962112771U, 2961895337U, 2961679121U, + 2961460591U, 2961241603U, 2961022781U, 2960805161U, 2960587099U, + 2960369359U, 2960151149U, 2959931383U, 2959714627U, 2959495937U, + 2959277393U, 2959059997U, 2958843161U, 2958625499U, 2958407399U, + 2958189191U, 2957972767U, 2957753053U, 2957535137U, 2957317171U, + 2957098873U, 2956880557U, 2956660747U, 2956441343U, 2956224577U, + 2956007273U, 2955789979U, 2955569107U, 2955349213U, 2955131051U, + 2954912297U, 2954693083U, 2954475233U, 2954255153U, 2954037211U, + 2953818851U, 2953599667U, 2953381993U, 2953162151U, 2952942739U, + 2952725873U, 2952506693U, 2952289517U, 2952071821U, 2951854319U, + 2951636731U, 2951419189U, 2951201251U, 2950982971U, 2950763201U, + 2950544221U, 2950326689U, 2950110017U, 2949891643U, 2949673561U, + 2949456077U, 2949238151U, 2949022819U, 2948803327U, 2948584297U, + 2948367439U, 2948148473U, 2947930483U, 2947712767U, 2947495459U, + 2947277803U, 2947061057U, 2946842537U, 2946625949U, 2946405619U, + 2946187753U, 2945970421U, 2945751373U, 2945535001U, 2945315713U, + 2945096753U, 2944880387U, 2944658933U, 2944441141U, 2944223479U, + 2944005997U, 2943788681U, 2943569197U, 2943351529U, 2943132887U, + 2942914609U, 2942697049U, 2942480587U, 2942261857U, 2942041747U, + 2941824229U, 2941604959U, 2941387153U, 2941168301U, 2940949691U, + 2940733787U, 2940516781U, 2940299849U, 2940084479U, 2939867743U, + 2939650613U, 2939432609U, 2939214277U, 2938996777U, 2938779271U, + 2938560353U, 2938341551U, 2938124249U, 2937905819U, 2937690901U, + 2937472607U, 2937253091U, 2937035341U, 2936814169U, 2936597249U, + 2936378723U, 2936162003U, 2935942103U, 2935724443U, 2935504679U, + 2935286489U, 2935067897U, 2934850591U, 2934633607U, 2934416071U, + 2934197197U, 2933980571U, 2933761433U, 2933543771U, 2933324839U, + 2933105831U, 2932886129U, 2932668953U, 2932451867U, 2932234901U, + 2932015831U, 2931799373U, 2931579601U, 2931363089U, 2931144523U, + 2930928227U, 2930711587U, 2930493919U, 2930273009U, 2930054573U, + 2929836719U, 2929619653U, 2929400603U, 2929183613U, 2928966151U, + 2928748139U, 2928530929U, 2928313153U, 2928094357U, 2927875619U, + 2927658673U, 2927442487U, 2927222069U, 2927004709U, 2926787309U, + 2926569361U, 2926350367U, 2926135529U, 2925917893U, 2925698173U, + 2925480919U, 2925263279U, 2925046463U, 2924831069U, 2924613371U, + 2924393729U, 2924175193U, 2923954801U, 2923737343U, 2923518683U, + 2923300829U, 2923082209U, 2922864767U, 2922649421U, 2922430073U, + 2922212519U, 2921994917U, 2921775803U, 2921559653U, 2921341103U, + 2921126489U, 2920908283U, 2920689061U, 2920471049U, 2920251703U, + 2920034347U, 2919817627U, 2919598021U, 2919381319U, 2919162959U, + 2918943683U, 2918729057U, 2918510587U, 2918292271U, 2918072057U, + 2917854413U, 2917635811U, 2917419499U, 2917202663U, 2916983521U, + 2916765193U, 2916545773U, 2916328517U, 2916112183U, 2915893681U, + 2915677241U, 2915456513U, 2915239601U, 2915020937U, 2914803761U, + 2914586503U, 2914368059U, 2914150271U, 2913932779U, 2913714131U, + 2913494791U, 2913274457U, 2913057307U, 2912839169U, 2912621401U, + 2912404247U, 2912187853U, 2911970317U, 2911752157U, 2911532539U, + 2911313501U, 2911094951U, 2910876457U, 2910657353U, 2910439451U, + 2910221297U, 2910003703U, 2909787409U, 2909568721U, 2909351741U, + 2909134769U, 2908916249U, 2908699601U, 2908480777U, 2908262023U, + 2908043023U, 2907825317U, 2907607337U, 2907388073U, 2907166967U, + 2906952473U, 2906736593U, 2906518943U, 2906300231U, 2906082233U, + 2905864067U, 2905644013U, 2905426619U, 2905208881U, 2904993263U, + 2904773771U, 2904556769U, 2904338867U, 2904123031U, 2903903861U, + 2903686447U, 2903468497U, 2903250821U, 2903031559U, 2902812839U, + 2902597123U, 2902380449U, 2902160717U, 2901941417U, 2901724187U, + 2901507019U, 2901289403U, 2901071813U, 2900854379U, 2900634593U, + 2900418889U, 2900202287U, 2899984603U, 2899766291U, 2899550011U, + 2899332323U, 2899114357U, 2898895687U, 2898677891U, 2898458359U, + 2898238669U, 2898022789U, 2897804407U, 2897587421U, 2897369021U, + 2897150423U, 2896932589U, 2896714631U, 2896495643U, 2896278251U, + 2896061459U, 2895842179U, 2895625609U, 2895408143U, 2895191393U, + 2894976157U, 2894758709U, 2894538461U, 2894320211U, 2894101087U, + 2893885381U, 2893666007U, 2893448681U, 2893230569U, 2893012403U, + 2892794153U, 2892573601U, 2892357361U, 2892141401U, 2891924291U, + 2891705197U, 2891485453U, 2891265869U, 2891046343U, 2890827241U, + 2890611539U, 2890395037U, 2890176347U, 2889959197U, 2889741301U, + 2889523193U, 2889304499U, 2889089393U, 2888872171U, 2888652913U, + 2888435443U, 2888217103U, 2887998313U, 2887779967U, 2887561093U, + 2887343237U, 2887123997U, 2886907081U, 2886689119U, 2886472033U, + 2886253057U, 2886035473U, 2885816789U, 2885599417U, 2885384233U, + 2885167091U, 2884947421U, 2884728403U, 2884511183U, 2884293637U, + 2884076357U, 2883857357U, 2883636991U, 2883420959U, 2883205421U, + 2882988211U, 2882768663U, 2882551601U, 2882332891U, 2882115923U, + 2881893467U, 2881675499U, 2881460221U, 2881243067U, 2881026271U, + 2880811447U, 2880592861U, 2880372919U, 2880155819U, 2879937503U, + 2879719223U, 2879501707U, 2879284477U, 2879065151U, 2878847353U, + 2878630171U, 2878412213U, 2878195469U, 2877978211U, 2877761027U, + 2877542959U, 2877323003U, 2877103631U, 2876887777U, 2876669153U, + 2876450789U, 2876234329U, 2876015969U, 2875798063U, 2875580219U, + 2875359587U, 2875143757U, 2874924197U, 2874705727U, 2874488887U, + 2874269987U, 2874053293U, 2873838833U, 2873621573U, 2873405077U, + 2873184967U, 2872965317U, 2872747699U, 2872530079U, 2872311397U, + 2872093027U, 2871876197U, 2871660371U, 2871442997U, 2871223709U, + 2871006713U, 2870788931U, 2870569511U, 2870353319U, 2870136403U, + 2869918537U, 2869699211U, 2869482403U, 2869264327U, 2869046833U, + 2868829897U, 2868611561U, 2868394531U, 2868174143U, 2867957447U, + 2867741813U, 2867525273U, 2867306537U, 2867087807U, 2866870037U, + 2866650131U, 2866432507U, 2866214723U, 2865995389U, 2865779281U, + 2865562759U, 2865345643U, 2865128281U, 2864909689U, 2864694359U, + 2864474981U, 2864259109U, 2864041781U, 2863821967U, 2863603163U, + 2863384697U, 2863168019U, 2862948337U, 2862729659U, 2862513271U, + 2862296011U, 2862079601U, 2861861329U, 2861642369U, 2861425097U, + 2861209789U, 2860995217U, 2860778423U, 2860561097U, 2860342603U, + 2860123993U, 2859905843U, 2859688873U, 2859471767U, 2859252779U, + 2859032731U, 2858814547U, 2858597117U, 2858380367U, 2858163197U, + 2857943411U, 2857725271U, 2857506689U, 2857290773U, 2857072787U, + 2856856927U, 2856636661U, 2856421241U, 2856205237U, 2855990087U, + 2855772947U, 2855553373U, 2855333407U, 2855115623U, 2854898329U, + 2854680739U, 2854464091U, 2854245203U, 2854025267U, 2853810433U, + 2853595379U, 2853379457U, 2853160217U, 2852940071U, 2852723551U, + 2852506303U, 2852289907U, 2852072389U, 2851854713U, 2851637123U, + 2851420771U, 2851204067U, 2850984959U, 2850768589U, 2850549269U, + 2850330421U, 2850111983U, 2849894777U, 2849677687U, 2849461753U, + 2849245277U, 2849027833U, 2848809701U, 2848590973U, 2848374059U, + 2848154471U, 2847936691U, 2847718589U, 2847501413U, 2847283139U, + 2847064399U, 2846845681U, 2846630233U, 2846412451U, 2846195621U, + 2845978997U, 2845761719U, 2845545929U, 2845328281U, 2845111153U, + 2844894137U, 2844676819U, 2844457703U, 2844237833U, 2844020057U, + 2843802061U, 2843583269U, 2843367311U, 2843148307U, 2842929931U, + 2842712767U, 2842494803U, 2842276837U, 2842059893U, 2841843317U, + 2841625249U, 2841405043U, 2841186893U, 2840966993U, 2840751341U, + 2840533337U, 2840315887U, 2840099881U, 2839879993U, 2839663579U, + 2839446527U, 2839227731U, 2839010423U, 2838792029U, 2838573323U, + 2838357359U, 2838139411U, 2837920433U, 2837703611U, 2837486299U, + 2837267611U, 2837049623U, 2836833059U, 2836613807U, 2836398179U, + 2836180517U, 2835963887U, 2835744931U, 2835526247U, 2835309481U, + 2835089911U, 2834871859U, 2834655797U, 2834437279U, 2834220317U, + 2834003617U, 2833786201U, 2833565099U, 2833349143U, 2833132711U, + 2832915803U, 2832695309U, 2832478303U, 2832259931U, 2832041741U, + 2831822611U, 2831604649U, 2831385941U, 2831168953U, 2830949377U, + 2830732193U, 2830514789U, 2830296191U, 2830078421U, 2829861907U, + 2829645557U, 2829428501U, 2829210367U, 2828994253U, 2828776007U, + 2828556517U, 2828338973U, 2828122361U, 2827905911U, 2827687451U, + 2827470001U, 2827253929U, 2827036441U, 2826817351U, 2826600781U, + 2826383321U, 2826165103U, 2825945599U, 2825728769U, 2825510437U, + 2825292881U, 2825075599U, 2824857577U, 2824637267U, 2824421753U, + 2824203383U, 2823985121U, 2823767741U, 2823552713U, 2823334027U, + 2823115531U, 2822899567U, 2822681171U, 2822466149U, 2822249779U, + 2822031559U, 2821815097U, 2821597187U, 2821377467U, 2821161307U, + 2820944677U, 2820726023U, 2820509233U, 2820291787U, 2820074617U, + 2819858617U, 2819639863U, 2819420909U, 2819204699U, 2818986097U, + 2818769671U, 2818554127U, 2818338797U, 2818119323U, 2817902393U, + 2817687143U, 2817470609U, 2817251677U, 2817033533U, 2816816729U, + 2816597177U, 2816379701U, 2816161721U, 2815943177U, 2815724267U, + 2815508719U, 2815292171U, 2815074161U, 2814855517U, 2814639523U, + 2814424241U, 2814205813U, 2813989523U, 2813771789U, 2813553863U, + 2813335013U, 2813118311U, 2812899511U, 2812682017U, 2812466269U, + 2812247873U, 2812029713U, 2811814463U, 2811594971U, 2811377483U, + 2811158557U, 2810940163U, 2810724047U, 2810504129U, 2810285299U, + 2810067109U, 2809850917U, 2809632401U, 2809416563U, 2809198597U, + 2808980641U, 2808761933U, 2808546109U, 2808327799U, 2808109763U, + 2807892041U, 2807673161U, 2807455799U, 2807239129U, 2807021237U, + 2806801457U, 2806581781U, 2806364989U, 2806148617U, 2805931031U, + 2805715879U, 2805500573U, 2805283331U, 2805064187U, 2804847361U, + 2804630473U, 2804413741U, 2804195767U, 2803975861U, 2803759481U, + 2803540147U, 2803324603U, 2803107253U, 2802890353U, 2802672823U, + 2802457183U, 2802239873U, 2802023131U, 2801805257U, 2801588953U, + 2801372323U, 2801154773U, 2800937873U, 2800719839U, 2800502303U, + 2800284107U, 2800066679U, 2799847909U, 2799629947U, 2799413213U, + 2799194747U, 2798976953U, 2798757359U, 2798541121U, 2798323391U, + 2798104747U, 2797889089U, 2797671869U, 2797455259U, 2797239293U, + 2797022453U, 2796803531U, 2796585007U, 2796367729U, 2796151247U, + 2795933939U, 2795714539U, 2795497283U, 2795280629U, 2795064541U, + 2794846657U, 2794628513U, 2794411001U, 2794193641U, 2793974507U, + 2793756883U, 2793538697U, 2793322783U, 2793104891U, 2792887567U, + 2792669413U, 2792450077U, 2792234747U, 2792015983U, 2791799281U, + 2791579949U, 2791362671U, 2791148117U, 2790929363U, 2790712147U, + 2790494117U, 2790276341U, 2790057701U, 2789840201U, 2789622509U, + 2789404531U, 2789187923U, 2788970959U, 2788753739U, 2788535047U, + 2788317643U, 2788099129U, 2787883151U, 2787666533U, 2787448931U, + 2787231721U, 2787014497U, 2786796839U, 2786578331U, 2786361649U, + 2786144821U, 2785926443U, 2785709483U, 2785492691U, 2785276147U, + 2785059701U, 2784842513U, 2784623269U, 2784403757U, 2784186253U, + 2783970367U, 2783751689U, 2783533561U, 2783316001U, 2783098823U, + 2782882673U, 2782664111U, 2782447223U, 2782229669U, 2782011607U, + 2781792473U, 2781577033U, 2781359699U, 2781143957U, 2780925857U, + 2780705443U, 2780487971U, 2780272037U, 2780052623U, 2779835621U, + 2779620559U, 2779402261U, 2779184761U, 2778966361U, 2778750509U, + 2778533341U, 2778314027U, 2778097499U, 2777877251U, 2777660539U, + 2777443531U, 2777226589U, 2777009243U, 2776792973U, 2776576351U, + 2776361117U, 2776143047U, 2775924847U, 2775707611U, 2775489313U, + 2775272177U, 2775054169U, 2774836811U, 2774619791U, 2774401967U, + 2774184313U, 2773966513U, 2773747181U, 2773530527U, 2773313149U, + 2773095791U, 2772879017U, 2772660467U, 2772444667U, 2772228551U, + 2772009767U, 2771792449U, 2771576581U, 2771359039U, 2771144221U, + 2770927889U, 2770711787U, 2770494997U, 2770277231U, 2770058563U, + 2769839873U, 2769624397U, 2769407651U, 2769188251U, 2768970991U, + 2768754187U, 2768536579U, 2768319319U, 2768102431U, 2767887809U, + 2767669573U, 2767451647U, 2767235123U, 2767018187U, 2766800807U, + 2766583471U, 2766366329U, 2766148349U, 2765931257U, 2765713711U, + 2765494453U, 2765279519U, 2765058767U, 2764841509U, 2764622239U, + 2764406269U, 2764188703U, 2763970529U, 2763752401U, 2763533807U, + 2763317149U, 2763100811U, 2762884231U, 2762668303U, 2762450149U, + 2762230519U, 2762015407U, 2761798139U, 2761581419U, 2761365491U, + 2761146097U, 2760927271U, 2760711053U, 2760493937U, 2760274871U, + 2760056279U, 2759839081U, 2759621659U, 2759403499U, 2759183873U, + 2758967117U, 2758749431U, 2758531091U, 2758312511U, 2758094869U, + 2757875647U, 2757661289U, 2757443287U, 2757225577U, 2757009529U, + 2756793001U, 2756576659U, 2756357939U, 2756141051U, 2755926427U, + 2755708801U, 2755491989U, 2755275233U, 2755057649U, 2754840499U, + 2754623321U, 2754407107U, 2754190189U, 2753970071U, 2753751277U, + 2753533889U, 2753317397U, 2753098739U, 2752879889U, 2752663559U, + 2752447129U, 2752230763U, 2752012477U, 2751795523U, 2751574817U, + 2751359173U, 2751143231U, 2750927563U, 2750710201U, 2750494993U, + 2750277767U, 2750058631U, 2749838719U, 2749621681U, 2749404323U, + 2749186409U, 2748969491U, 2748754933U, 2748537481U, 2748318541U, + 2748099931U, 2747881769U, 2747664079U, 2747446327U, 2747228923U, + 2747009921U, 2746791577U, 2746574401U, 2746356461U, 2746139393U, + 2745923597U, 2745705107U, 2745486259U, 2745268853U, 2745053603U, + 2744837633U, 2744620103U, 2744402081U, 2744184061U, 2743965649U, + 2743747399U, 2743529093U, 2743309747U, 2743091501U, 2742875263U, + 2742657499U, 2742436849U, 2742221177U, 2742002209U, 2741784317U, + 2741565467U, 2741350751U, 2741134939U, 2740917589U, 2740700147U, + 2740484129U, 2740268543U, 2740051661U, 2739832097U, 2739613999U, + 2739397519U, 2739180611U, 2738965601U, 2738750713U, 2738530519U, + 2738312657U, 2738097601U, 2737880659U, 2737663919U, 2737447673U, + 2737231039U, 2737011469U, 2736795203U, 2736577367U, 2736359929U, + 2736140411U, 2735922361U, 2735707621U, 2735490701U, 2735272087U, + 2735051993U, 2734834733U, 2734617673U, 2734399807U, 2734183789U, + 2733964489U, 2733747299U, 2733531319U, 2733315773U, 2733096937U, + 2732877229U, 2732659313U, 2732442539U, 2732224381U, 2732008493U, + 2731791107U, 2731575277U, 2731359073U, 2731143791U, 2730927193U, + 2730710711U, 2730492463U, 2730272821U, 2730056191U, 2729836853U, + 2729618401U, 2729401309U, 2729183783U, 2728967399U, 2728750513U, + 2728532957U, 2728316387U, 2728095649U, 2727876353U, 2727657487U, + 2727441889U, 2727223129U, 2727005321U, 2726785889U, 2726567969U, + 2726350567U, 2726134057U, 2725917767U, 2725702043U, 2725483997U, + 2725265143U, 2725048691U, 2724834121U, 2724617173U, 2724400213U, + 2724182843U, 2723963009U, 2723744983U, 2723527771U, 2723309219U, + 2723091817U, 2722872419U, 2722654423U, 2722437283U, 2722221071U, + 2722003787U, 2721787063U, 2721571087U, 2721354179U, 2721135533U, + 2720918813U, 2720700211U, 2720482043U, 2720263867U, 2720045333U, + 2719829513U, 2719610849U, 2719394527U, 2719178291U, 2718963449U, + 2718746123U, 2718526709U, 2718310267U, 2718091331U, 2717873803U, + 2717658043U, 2717440529U, 2717224541U, 2717007047U, 2716791377U, + 2716572949U, 2716355051U, 2716137659U, 2715920573U, 2715704273U, + 2715486167U, 2715267853U, 2715051109U, 2714833687U, 2714615261U, + 2714398829U, 2714182301U, 2713964917U, 2713748071U, 2713530331U, + 2713313419U, 2713095769U, 2712878431U, 2712662101U, 2712443231U, + 2712227411U, 2712009089U, 2711793187U, 2711574529U, 2711360329U, + 2711144291U, 2710924687U, 2710707551U, 2710489841U, 2710273571U, + 2710057997U, 2709838841U, 2709622463U, 2709405917U, 2709186349U, + 2708968877U, 2708750413U, 2708532971U, 2708318071U, 2708101423U, + 2707882889U, 2707665913U, 2707449389U, 2707232833U, 2707015789U, + 2706799423U, 2706580579U, 2706364931U, 2706147757U, 2705930971U, + 2705712257U, 2705495677U, 2705279699U, 2705062303U, 2704846349U, + 2704628477U, 2704412203U, 2704194443U, 2703975119U, 2703756427U, + 2703538801U, 2703322967U, 2703105413U, 2702888407U, 2702670497U, + 2702454919U, 2702235997U, 2702021737U, 2701801493U, 2701585729U, + 2701367989U, 2701151581U, 2700934559U, 2700718619U, 2700500519U, + 2700284057U, 2700067691U, 2699850661U, 2699632207U, 2699414203U, + 2699197199U, 2698979867U, 2698763449U, 2698546423U, 2698328177U, + 2698112723U, 2697894349U, 2697677911U, 2697461189U, 2697244709U, + 2697028651U, 2696813281U, 2696594269U, 2696377417U, 2696159857U, + 2695942259U, 2695726037U, 2695509877U, 2695293703U, 2695077029U, + 2694857899U, 2694641657U, 2694426953U, 2694209863U, 2693992429U, + 2693776999U, 2693558843U, 2693339317U, 2693121281U, 2692904281U, + 2692687223U, 2692468787U, 2692252309U, 2692034089U, 2691819241U, + 2691602107U, 2691383239U, 2691166903U, 2690948789U, 2690732003U, + 2690515171U, 2690299373U, 2690081593U, 2689862561U, 2689645753U, + 2689428227U, 2689209829U, 2688993607U, 2688777209U, 2688561017U, + 2688343547U, 2688127933U, 2687911913U, 2687694539U, 2687476763U, + 2687263067U, 2687049571U, 2686832471U, 2686615571U, 2686398347U, + 2686179949U, 2685965081U, 2685747137U, 2685529541U, 2685310961U, + 2685093211U, 2684876093U, 2684658019U, 2684440067U, 2684223953U, + 2684005817U, 2683789963U, 2683571243U, 2683353733U, 2683137199U, + 2682917623U, 2682700063U, 2682479377U, 2682264451U, 2682047707U, + 2681828923U, 2681611753U, 2681394413U, 2681177111U, 2680959709U, + 2680744291U, 2680525957U, 2680308977U, 2680096213U, 2679877279U, + 2679660703U, 2679442013U, 2679225181U, 2679008639U, 2678791777U, + 2678576051U, 2678358019U, 2678142487U, 2677926301U, 2677708807U, + 2677493873U, 2677275257U, 2677055411U, 2676838837U, 2676620759U, + 2676405769U, 2676189599U, 2675970641U, 2675755597U, 2675538689U, + 2675323379U, 2675104633U, 2674886273U, 2674669183U, 2674452647U, + 2674236199U, 2674019521U, 2673802099U, 2673589109U, 2673370517U, + 2673153583U, 2672936393U, 2672719319U, 2672502383U, 2672285699U, + 2672069171U, 2671851187U, 2671632563U, 2671414829U, 2671199281U, + 2670982297U, 2670764023U, 2670547589U, 2670329219U, 2670112937U, + 2669897969U, 2669681671U, 2669463829U, 2669247731U, 2669028689U, + 2668810241U, 2668592911U, 2668377587U, 2668161701U, 2667945023U, + 2667728057U, 2667510931U, 2667293077U, 2667076751U, 2666860253U, + 2666643367U, 2666425523U, 2666207899U, 2665990751U, 2665773419U, + 2665557353U, 2665337501U, 2665121737U, 2664904817U, 2664690073U, + 2664472079U, 2664258323U, 2664039709U, 2663820461U, 2663602421U, + 2663387431U, 2663168177U, 2662951507U, 2662735541U, 2662516147U, + 2662300259U, 2662082509U, 2661865067U, 2661648779U, 2661432827U, + 2661214163U, 2660999801U, 2660781689U, 2660562241U, 2660345951U, + 2660127443U, 2659910443U, 2659691731U, 2659474313U, 2659255663U, + 2659039301U, 2658822889U, 2658607327U, 2658391117U, 2658171743U, + 2657953993U, 2657735627U, 2657519093U, 2657300533U, 2657084537U, + 2656869827U, 2656653679U, 2656434799U, 2656218541U, 2656001609U, + 2655785789U, 2655570427U, 2655354607U, 2655138589U, 2654923177U, + 2654706149U, 2654489879U, 2654274641U, 2654055773U, 2653839263U, + 2653621843U, 2653405831U, 2653189291U, 2652972197U, 2652754297U, + 2652539249U, 2652321443U, 2652103859U, 2651884883U, 2651667787U, + 2651451791U, 2651231629U, 2651014127U, 2650796653U, 2650580249U, + 2650363361U, 2650147111U, 2649933037U, 2649715879U, 2649498611U, + 2649282833U, 2649064001U, 2648847847U, 2648628863U, 2648409479U, + 2648192941U, 2647976189U, 2647759267U, 2647543273U, 2647326169U, + 2647110629U, 2646891629U, 2646675377U, 2646458467U, 2646241303U, + 2646024781U, 2645808241U, 2645591363U, 2645373799U, 2645155729U, + 2644938983U, 2644720241U, 2644505509U, 2644285547U, 2644068403U, + 2643849823U, 2643632899U, 2643416371U, 2643198983U, 2642982389U, + 2642764637U, 2642546867U, 2642330021U, 2642114309U, 2641897289U, + 2641679903U, 2641464583U, 2641247107U, 2641030501U, 2640813577U, + 2640595387U, 2640378677U, 2640158657U, 2639944249U, 2639727721U, + 2639511683U, 2639296301U, 2639077267U, 2638858801U, 2638637987U, + 2638423691U, 2638207669U, 2637992069U, 2637776507U, 2637558317U, + 2637341431U, 2637125737U, 2636909777U, 2636691353U, 2636473793U, + 2636255731U, 2636038121U, 2635820051U, 2635603241U, 2635384553U, + 2635166099U, 2634948179U, 2634729767U, 2634513631U, 2634295421U, + 2634078131U, 2633861851U, 2633645137U, 2633429243U, 2633212481U, + 2632993633U, 2632775279U, 2632558007U, 2632341337U, 2632126339U, + 2631908537U, 2631692597U, 2631477319U, 2631259781U, 2631043561U, + 2630828731U, 2630613143U, 2630397893U, 2630179499U, 2629962739U, + 2629744907U, 2629529321U, 2629310449U, 2629091953U, 2628874163U, + 2628659393U, 2628440917U, 2628222629U, 2628006571U, 2627789387U, + 2627571263U, 2627356183U, 2627139131U, 2626923749U, 2626706723U, + 2626490747U, 2626273151U, 2626054199U, 2625836069U, 2625621469U, + 2625405073U, 2625186331U, 2624968571U, 2624753177U, 2624536573U, + 2624318867U, 2624102137U, 2623886479U, 2623670167U, 2623450667U, + 2623233539U, 2623015669U, 2622798911U, 2622582203U, 2622365293U, + 2622146899U, 2621929019U, 2621714273U, 2621497343U, 2621280383U, + 2621064059U, 2620847813U, 2620631471U, 2620414429U, 2620198877U, + 2619982487U, 2619765787U, 2619550579U, 2619333139U, 2619116081U, + 2618899931U, 2618682371U, 2618463889U, 2618248037U, 2618032909U, + 2617816303U, 2617598407U, 2617381099U, 2617163711U, 2616947087U, + 2616730153U, 2616515873U, 2616296401U, 2616081211U, 2615863463U, + 2615646091U, 2615429951U, 2615214491U, 2614996649U, 2614780747U, + 2614561129U, 2614343869U, 2614125539U, 2613909959U, 2613692597U, + 2613477539U, 2613260467U, 2613044363U, 2612829473U, 2612611453U, + 2612394649U, 2612176891U, 2611957609U, 2611740809U, 2611525001U, + 2611307623U, 2611092301U, 2610874723U, 2610658429U, 2610440659U, + 2610225349U, 2610009869U, 2609793761U, 2609575523U, 2609357537U, + 2609140153U, 2608923287U, 2608707473U, 2608489789U, 2608273363U, + 2608055477U, 2607838963U, 2607621487U, 2607403291U, 2607186877U, + 2606966951U, 2606751743U, 2606533609U, 2606317411U, 2606100793U, + 2605883897U, 2605667153U, 2605448753U, 2605231193U, 2605014913U, + 2604797309U, 2604582131U, 2604366593U, 2604149179U, 2603934233U, + 2603717729U, 2603502661U, 2603284571U, 2603067263U, 2602846133U, + 2602629787U, 2602412567U, 2602195759U, 2601979477U, 2601761791U, + 2601547447U, 2601328687U, 2601107869U, 2600891873U, 2600673967U, + 2600457787U, 2600242111U, 2600025353U, 2599807471U, 2599589617U, + 2599374607U, 2599156873U, 2598942991U, 2598725593U, 2598507889U, + 2598293911U, 2598075091U, 2597857697U, 2597643011U, 2597426287U, + 2597207407U, 2596990943U, 2596775537U, 2596557989U, 2596340353U, + 2596123469U, 2595906763U, 2595690697U, 2595473267U, 2595256019U, + 2595041297U, 2594823029U, 2594608529U, 2594391979U, 2594174971U, + 2593957823U, 2593739803U, 2593521767U, 2593305053U, 2593087513U, + 2592871531U, 2592654041U, 2592437929U, 2592221161U, 2592003863U, + 2591787493U, 2591571179U, 2591355859U, 2591139919U, 2590921727U, + 2590705829U, 2590488157U, 2590272709U, 2590057949U, 2589843371U, + 2589624967U, 2589408167U, 2589194147U, 2588976583U, 2588759923U, + 2588542763U, 2588325721U, 2588107619U, 2587892101U, 2587675567U, + 2587460251U, 2587244389U, 2587025141U, 2586807149U, 2586590401U, + 2586374317U, 2586158693U, 2585941643U, 2585722697U, 2585505907U, + 2585290069U, 2585072767U, 2584855279U, 2584640579U, 2584422497U, + 2584204607U, 2583990001U, 2583773659U, 2583555721U, 2583338327U, + 2583121259U, 2582905651U, 2582688041U, 2582469793U, 2582254019U, + 2582037103U, 2581820699U, 2581606201U, 2581389763U, 2581174697U, + 2580956501U, 2580739171U, 2580522377U, 2580305843U, 2580090167U, + 2579872481U, 2579656291U, 2579442023U, 2579223007U, 2579006891U, + 2578788097U, 2578569919U, 2578353559U, 2578136993U, 2577920299U, + 2577706259U, 2577488027U, 2577272167U, 2577055669U, 2576837143U, + 2576619973U, 2576404241U, 2576188333U, 2575971793U, 2575754497U, + 2575538299U, 2575321747U, 2575105031U, 2574888223U, 2574672091U, + 2574456811U, 2574239957U, 2574024287U, 2573808011U, 2573590927U, + 2573375023U, 2573157761U, 2572940339U, 2572723019U, 2572506899U, + 2572292279U, 2572077103U, 2571858599U, 2571642473U, 2571425821U, + 2571208529U, 2570990369U, 2570773441U, 2570559869U, 2570342717U, + 2570124047U, 2569905977U, 2569691791U, 2569474489U, 2569259047U, + 2569043497U, 2568826747U, 2568610543U, 2568394487U, 2568177319U, + 2567960729U, 2567743853U, 2567527723U, 2567312149U, 2567094511U, + 2566876579U, 2566660301U, 2566443881U, 2566226821U, 2566010947U, + 2565794353U, 2565579977U, 2565364231U, 2565146569U, 2564930507U, + 2564713583U, 2564498843U, 2564283143U, 2564066677U, 2563849087U, + 2563634039U, 2563419293U, 2563201339U, 2562985517U, 2562768883U, + 2562550747U, 2562331649U, 2562114743U, 2561899009U, 2561684717U, + 2561469901U, 2561252557U, 2561036551U, 2560819993U, 2560600963U, + 2560383131U, 2560163939U, 2559947333U, 2559732017U, 2559515687U, + 2559298571U, 2559083963U, 2558866837U, 2558650291U, 2558433401U, + 2558218781U, 2558002897U, 2557785821U, 2557567981U, 2557350097U, + 2557134737U, 2556919997U, 2556701327U, 2556484211U, 2556267677U, + 2556051929U, 2555837747U, 2555622319U, 2555406457U, 2555188639U, + 2554971443U, 2554754921U, 2554539539U, 2554320997U, 2554104451U, + 2553889699U, 2553674129U, 2553456461U, 2553239069U, 2553022207U, + 2552804363U, 2552586833U, 2552373497U, 2552154617U, 2551939211U, + 2551722221U, 2551507171U, 2551289401U, 2551072441U, 2550854513U, + 2550637459U, 2550422011U, 2550204619U, 2549989213U, 2549772451U, + 2549556367U, 2549344409U, 2549126737U, 2548911913U, 2548696739U, + 2548480237U, 2548263559U, 2548045919U, 2547829759U, 2547611191U, + 2547396581U, 2547179527U, 2546962577U, 2546746981U, 2546529199U, + 2546312413U, 2546095631U, 2545880399U, 2545664809U, 2545449493U, + 2545232681U, 2545014881U, 2544797323U, 2544580949U, 2544362081U, + 2544144749U, 2543927899U, 2543710349U, 2543493541U, 2543278021U, + 2543058757U, 2542841729U, 2542624603U, 2542408513U, 2542191709U, + 2541975707U, 2541759137U, 2541542141U, 2541326009U, 2541111257U, + 2540896591U, 2540679419U, 2540462593U, 2540246953U, 2540030399U, + 2539813907U, 2539596281U, 2539379419U, 2539161697U, 2538945569U, + 2538728831U, 2538513301U, 2538297287U, 2538080243U, 2537864347U, + 2537649151U, 2537433263U, 2537217229U, 2537001541U, 2536784311U, + 2536567823U, 2536351751U, 2536135703U, 2535920071U, 2535703109U, + 2535485651U, 2535267913U, 2535049381U, 2534835071U, 2534618899U, + 2534401141U, 2534184743U, 2533968511U, 2533751977U, 2533535057U, + 2533319801U, 2533103939U, 2532889717U, 2532672287U, 2532458581U, + 2532240527U, 2532024263U, 2531808221U, 2531594033U, 2531375533U, + 2531159747U, 2530945583U, 2530728091U, 2530510111U, 2530291601U, + 2530076701U, 2529860363U, 2529644539U, 2529427169U, 2529210923U, + 2528994893U, 2528778227U, 2528561443U, 2528344967U, 2528129983U, + 2527914227U, 2527697857U, 2527483549U, 2527265941U, 2527048369U, + 2526831781U, 2526617609U, 2526401041U, 2526186511U, 2525969521U, + 2525751269U, 2525536837U, 2525319001U, 2525102543U, 2524883839U, + 2524667221U, 2524449793U, 2524233617U, 2524016647U, 2523800459U, + 2523584641U, 2523368747U, 2523151927U, 2522932883U, 2522717297U, + 2522499653U, 2522283347U, 2522067281U, 2521852183U, 2521635689U, + 2521420529U, 2521202821U, 2520984749U, 2520769301U, 2520551983U, + 2520337163U, 2520121147U, 2519904151U, 2519687407U, 2519469941U, + 2519254519U, 2519038309U, 2518820833U, 2518604357U, 2518386329U, + 2518171613U, 2517954631U, 2517740233U, 2517524573U, 2517306587U, + 2517091133U, 2516875549U, 2516659099U, 2516440349U, 2516223511U, + 2516009189U, 2515791953U, 2515574741U, 2515356967U, 2515140851U, + 2514925321U, 2514708857U, 2514492941U, 2514278527U, 2514060737U, + 2513844511U, 2513629211U, 2513413999U, 2513197331U, 2512982491U, + 2512767919U, 2512550039U, 2512333891U, 2512118659U, 2511902051U, + 2511683351U, 2511466921U, 2511249691U, 2511035069U, 2510818363U, + 2510602331U, 2510385959U, 2510168447U, 2509952597U, 2509736107U, + 2509518721U, 2509301233U, 2509086889U, 2508870779U, 2508654017U, + 2508436187U, 2508220999U, 2508004423U, 2507788471U, 2507572759U, + 2507358193U, 2507142773U, 2506926857U, 2506708901U, 2506492003U, + 2506275773U, 2506059841U, 2505843227U, 2505628639U, 2505412999U, + 2505197309U, 2504978291U, 2504764349U, 2504546719U, 2504331703U, + 2504116333U, 2503900211U, 2503686869U, 2503468057U, 2503251931U, + 2503034987U, 2502819383U, 2502601529U, 2502383761U, 2502165307U, + 2501950663U, 2501732017U, 2501516429U, 2501298523U, 2501082677U, + 2500865963U, 2500651249U, 2500433521U, 2500215791U, 2499999013U, + 2499784513U, 2499566551U, 2499348193U, 2499133477U, 2498919091U, + 2498700949U, 2498484803U, 2498268767U, 2498051131U, 2497835203U, + 2497619143U, 2497401107U, 2497185151U, 2496967981U, 2496751651U, + 2496536257U, 2496318859U, 2496101129U, 2495884337U, 2495667091U, + 2495449483U, 2495234069U, 2495015851U, 2494798981U, 2494586071U, + 2494369567U, 2494153777U, 2493936787U, 2493720041U, 2493503279U, + 2493288713U, 2493072847U, 2492855327U, 2492639627U, 2492424367U, + 2492206993U, 2491988657U, 2491772527U, 2491556789U, 2491340471U, + 2491123897U, 2490906919U, 2490690511U, 2490473023U, 2490256157U, + 2490039371U, 2489824397U, 2489606737U, 2489386771U, 2489169691U, + 2488953791U, 2488738607U, 2488524167U, 2488307113U, 2488089367U, + 2487872069U, 2487655309U, 2487439177U, 2487224461U, 2487006499U, + 2486788963U, 2486573101U, 2486356783U, 2486139791U, 2485923217U, + 2485705493U, 2485487957U, 2485271471U, 2485052771U, 2484839933U, + 2484624929U, 2484408247U, 2484192527U, 2483973307U, 2483759609U, + 2483543987U, 2483328161U, 2483109467U, 2482893463U, 2482675901U, + 2482457161U, 2482241299U, 2482026611U, 2481810781U, 2481595201U, + 2481379739U, 2481163543U, 2480947769U, 2480731301U, 2480516641U, + 2480302337U, 2480086997U, 2479867427U, 2479650223U, 2479434857U, + 2479215799U, 2479001621U, 2478785357U, 2478571189U, 2478356417U, + 2478141383U, 2477923397U, 2477707373U, 2477488961U, 2477271481U, + 2477057941U, 2476842673U, 2476624159U, 2476409263U, 2476193219U, + 2475977579U, 2475761023U, 2475543029U, 2475328783U, 2475110999U, + 2474890879U, 2474674327U, 2474459227U, 2474244041U, 2474029147U, + 2473812701U, 2473596403U, 2473381349U, 2473165927U, 2472951167U, + 2472735413U, 2472520727U, 2472307091U, 2472091723U, 2471874173U, + 2471656697U, 2471441579U, 2471224237U, 2471006873U, 2470790431U, + 2470575083U, 2470358629U, 2470143691U, 2469927209U, 2469711271U, + 2469499757U, 2469281999U, 2469064889U, 2468847947U, 2468629519U, + 2468413229U, 2468197247U, 2467983239U, 2467766527U, 2467549933U, + 2467333889U, 2467116077U, 2466900307U, 2466683279U, 2466465941U, + 2466249673U, 2466036497U, 2465821507U, 2465604553U, 2465388727U, + 2465172733U, 2464957717U, 2464740137U, 2464523959U, 2464308311U, + 2464091587U, 2463874783U, 2463659027U, 2463441269U, 2463225563U, + 2463010027U, 2462791873U, 2462574523U, 2462356487U, 2462139853U, + 2461922713U, 2461706603U, 2461490771U, 2461272043U, 2461055423U, + 2460842491U, 2460624181U, 2460409169U, 2460192541U, 2459976229U, + 2459758421U, 2459540911U, 2459325443U, 2459107793U, 2458892551U, + 2458677601U, 2458461193U, 2458243223U, 2458027157U, 2457811933U, + 2457594323U, 2457378923U, 2457161789U, 2456946269U, 2456730629U, + 2456513639U, 2456297149U, 2456079463U, 2455863857U, 2455649191U, + 2455433069U, 2455218023U, 2455004333U, 2454788311U, 2454571607U, + 2454356581U, 2454139231U, 2453920571U, 2453704789U, 2453488979U, + 2453271463U, 2453054039U, 2452840781U, 2452623821U, 2452410967U, + 2452195063U, 2451976601U, 2451763159U, 2451547559U, 2451331549U, + 2451116651U, 2450900741U, 2450682943U, 2450465513U, 2450249993U, + 2450033627U, 2449816027U, 2449597919U, 2449381289U, 2449162117U, + 2448946469U, 2448729883U, 2448513373U, 2448294643U, 2448077341U, + 2447859991U, 2447646029U, 2447430317U, 2447215081U, 2446995403U, + 2446778861U, 2446563043U, 2446347913U, 2446130653U, 2445914279U, + 2445699913U, 2445483571U, 2445267343U, 2445053797U, 2444836921U, + 2444622311U, 2444408423U, 2444189777U, 2443974557U, 2443759229U, + 2443540247U, 2443324393U, 2443106177U, 2442890503U, 2442673561U, + 2442456791U, 2442241667U, 2442025237U, 2441808221U, 2441594489U, + 2441376631U, 2441160893U, 2440945873U, 2440728361U, 2440510843U, + 2440294657U, 2440080157U, 2439865657U, 2439651391U, 2439433319U, + 2439217799U, 2439004261U, 2438787661U, 2438570569U, 2438355421U, + 2438138531U, 2437923409U, 2437707127U, 2437492373U, 2437275517U, + 2437061327U, 2436844313U, 2436629971U, 2436414881U, 2436198631U, + 2435981077U, 2435762471U, 2435546731U, 2435333387U, 2435115047U, + 2434897891U, 2434683133U, 2434464391U, 2434247779U, 2434031381U, + 2433816977U, 2433598367U, 2433382891U, 2433166579U, 2432951363U, + 2432734259U, 2432519267U, 2432303207U, 2432088437U, 2431871549U, + 2431654009U, 2431438567U, 2431222883U, 2431004551U, 2430789007U, + 2430572239U, 2430357899U, 2430140243U, 2429923631U, 2429708647U, + 2429490697U, 2429277119U, 2429059631U, 2428841551U, 2428626203U, + 2428410749U, 2428193741U, 2427976979U, 2427760243U, 2427542993U, + 2427328229U, 2427113081U, 2426897147U, 2426680747U, 2426465647U, + 2426250041U, 2426034613U, 2425818701U, 2425601929U, 2425385723U, + 2425169891U, 2424956221U, 2424741701U, 2424525161U, 2424310661U, + 2424093157U, 2423875841U, 2423659657U, 2423445293U, 2423230783U, + 2423015821U, 2422799177U, 2422585771U, 2422367743U, 2422152179U, + 2421936493U, 2421719873U, 2421503983U, 2421287081U, 2421068899U, + 2420852347U, 2420636627U, 2420420903U, 2420204023U, 2419987799U, + 2419771187U, 2419554157U, 2419338787U, 2419124819U, 2418907529U, + 2418693047U, 2418479549U, 2418264571U, 2418048331U, 2417831257U, + 2417614807U, 2417399119U, 2417184257U, 2416967611U, 2416752409U, + 2416536271U, 2416319387U, 2416105057U, 2415886301U, 2415670069U, + 2415453023U, 2415235709U, 2415018433U, 2414803031U, 2414586983U, + 2414370943U, 2414155213U, 2413940083U, 2413723471U, 2413506059U, + 2413290541U, 2413073251U, 2412857789U, 2412643193U, 2412426707U, + 2412211163U, 2411993867U, 2411776583U, 2411562311U, 2411345479U, + 2411129923U, 2410914791U, 2410699133U, 2410481377U, 2410266007U, + 2410048829U, 2409832129U, 2409617663U, 2409401249U, 2409184651U, + 2408968189U, 2408751419U, 2408534461U, 2408320127U, 2408104597U, + 2407888957U, 2407671853U, 2407458671U, 2407241731U, 2407025459U, + 2406810563U, 2406592847U, 2406378241U, 2406160049U, 2405944223U, + 2405727229U, 2405511811U, 2405297623U, 2405082629U, 2404866197U, + 2404648957U, 2404432183U, 2404215091U, 2403999487U, 2403782401U, + 2403567059U, 2403350249U, 2403134623U, 2402919731U, 2402704211U, + 2402489473U, 2402272571U, 2402054147U, 2401837289U, 2401621687U, + 2401406131U, 2401189979U, 2400973123U, 2400757439U, 2400539651U, + 2400323077U, 2400105919U, 2399889293U, 2399675141U, 2399460449U, + 2399245733U, 2399029231U, 2398813981U, 2398597219U, 2398379413U, + 2398164833U, 2397948569U, 2397732923U, 2397515801U, 2397299549U, + 2397085021U, 2396867801U, 2396653109U, 2396435089U, 2396217739U, + 2395999153U, 2395783231U, 2395566959U, 2395350827U, 2395135343U, + 2394920179U, 2394702979U, 2394486719U, 2394270059U, 2394055669U, + 2393840479U, 2393622653U, 2393406401U, 2393190893U, 2392975477U, + 2392759277U, 2392544101U, 2392327433U, 2392113121U, 2391896839U, + 2391678997U, 2391461393U, 2391247091U, 2391031847U, 2390816957U, + 2390600393U, 2390384861U, 2390168317U, 2389953641U, 2389736719U, + 2389520779U, 2389304989U, 2389091333U, 2388874603U, 2388658969U, + 2388442499U, 2388225803U, 2388006067U, 2387791751U, 2387577977U, + 2387360413U, 2387144453U, 2386930687U, 2386714199U, 2386497403U, + 2386279781U, 2386064861U, 2385851509U, 2385635543U, 2385420431U, + 2385202607U, 2384985487U, 2384769461U, 2384554421U, 2384337071U, + 2384122519U, 2383906543U, 2383692127U, 2383476829U, 2383262647U, + 2383047829U, 2382830459U, 2382615419U, 2382400133U, 2382184537U, + 2381968223U, 2381751839U, 2381535539U, 2381318791U, 2381103733U, + 2380886887U, 2380673297U, 2380455919U, 2380238759U, 2380021361U, + 2379807751U, 2379591671U, 2379377153U, 2379160853U, 2378944891U, + 2378727539U, 2378510513U, 2378293279U, 2378076593U, 2377861237U, + 2377644917U, 2377429697U, 2377213193U, 2376996647U, 2376782251U, + 2376566029U, 2376349571U, 2376133733U, 2375919907U, 2375704391U, + 2375485579U, 2375270591U, 2375054579U, 2374837373U, 2374621817U, + 2374406971U, 2374192853U, 2373976057U, 2373760531U, 2373545989U, + 2373327241U, 2373111347U, 2372894317U, 2372680469U, 2372464907U, + 2372249629U, 2372032771U, 2371818637U, 2371601437U, 2371383727U, + 2371168507U, 2370952511U, 2370736603U, 2370518873U, 2370304579U, + 2370089479U, 2369872579U, 2369658763U, 2369441329U, 2369224889U, + 2369010191U, 2368793017U, 2368578991U, 2368362539U, 2368147211U, + 2367932341U, 2367716921U, 2367502859U, 2367286853U, 2367071513U, + 2366857811U, 2366642171U, 2366426123U, 2366209843U, 2365994641U, + 2365779181U, 2365561397U, 2365345733U, 2365130297U, 2364913519U, + 2364698551U, 2364482947U, 2364266941U, 2364048899U, 2363831777U, + 2363616797U, 2363399443U, 2363185907U, 2362970219U, 2362753663U, + 2362538753U, 2362325137U, 2362108759U, 2361891607U, 2361677057U, + 2361460697U, 2361244889U, 2361029521U, 2360811251U, 2360593589U, + 2360377871U, 2360160973U, 2359944163U, 2359729637U, 2359513753U, + 2359298749U, 2359081141U, 2358864077U, 2358647191U, 2358433151U, + 2358217307U, 2358002501U, 2357786393U, 2357572391U, 2357355223U, + 2357140127U, 2356922443U, 2356706927U, 2356491167U, 2356276309U, + 2356060219U, 2355843337U, 2355628351U, 2355412211U, 2355196939U, + 2354979299U, 2354762923U, 2354547589U, 2354332327U, 2354116403U, + 2353898347U, 2353682899U, 2353467719U, 2353251041U, 2353034861U, + 2352821521U, 2352608729U, 2352391733U, 2352177071U, 2351959373U, + 2351743871U, 2351527331U, 2351311103U, 2351095787U, 2350880537U, + 2350663867U, 2350448987U, 2350233607U, 2350018009U, 2349802193U, + 2349585643U, 2349371473U, 2349154459U, 2348938483U, 2348723393U, + 2348506163U, 2348290627U, 2348073529U, 2347858001U, 2347641251U, + 2347426061U, 2347210109U, 2346994847U, 2346777833U, 2346563741U, + 2346347957U, 2346130597U, 2345915233U, 2345700967U, 2345483321U, + 2345268559U, 2345055421U, 2344836029U, 2344620749U, 2344404077U, + 2344188467U, 2343971621U, 2343753989U, 2343537377U, 2343322691U, + 2343106237U, 2342889763U, 2342675663U, 2342461337U, 2342245693U, + 2342028907U, 2341811071U, 2341594513U, 2341380673U, 2341165823U, + 2340950653U, 2340737603U, 2340521567U, 2340303299U, 2340086269U, + 2339869699U, 2339651581U, 2339437049U, 2339222891U, 2339007247U, + 2338790449U, 2338576003U, 2338361213U, 2338146329U, 2337927731U, + 2337714713U, 2337499061U, 2337281887U, 2337065981U, 2336851397U, + 2336635331U, 2336418673U, 2336202863U, 2335987399U, 2335772269U, + 2335553713U, 2335341083U, 2335126153U, 2334909481U, 2334693863U, + 2334479723U, 2334262787U, 2334047503U, 2333831449U, 2333616709U, + 2333401867U, 2333186161U, 2332970869U, 2332755569U, 2332541017U, + 2332323197U, 2332106743U, 2331891473U, 2331676169U, 2331460273U, + 2331243809U, 2331029143U, 2330814481U, 2330599837U, 2330384489U, + 2330164511U, 2329947589U, 2329731637U, 2329515427U, 2329299289U, + 2329084333U, 2328867469U, 2328652009U, 2328436417U, 2328218201U, + 2328001597U, 2327784983U, 2327571221U, 2327354473U, 2327138579U, + 2326921769U, 2326706687U, 2326492871U, 2326275509U, 2326060369U, + 2325845507U, 2325630133U, 2325415607U, 2325198173U, 2324982083U, + 2324766023U, 2324552177U, 2324336591U, 2324119951U, 2323903651U, + 2323689751U, 2323472693U, 2323258859U, 2323044107U, 2322827393U, + 2322611059U, 2322394247U, 2322179177U, 2321964247U, 2321747737U, + 2321531423U, 2321315869U, 2321098673U, 2320883861U, 2320668953U, + 2320454753U, 2320239629U, 2320027529U, 2319811937U, 2319596449U, + 2319378899U, 2319162739U, 2318945131U, 2318727809U, 2318510639U, + 2318296021U, 2318078921U, 2317863337U, 2317645181U, 2317427533U, + 2317209683U, 2316994513U, 2316778027U, 2316562777U, 2316347219U, + 2316132769U, 2315916809U, 2315702513U, 2315487613U, 2315271197U, + 2315055979U, 2314841521U, 2314625671U, 2314411019U, 2314197409U, + 2313983249U, 2313767077U, 2313551609U, 2313335711U, 2313119387U, + 2312904719U, 2312689363U, 2312472829U, 2312256629U, 2312040277U, + 2311822883U, 2311606477U, 2311392157U, 2311180061U, 2310965303U, + 2310751957U, 2310537049U, 2310322247U, 2310106033U, 2309889749U, + 2309673881U, 2309456431U, 2309242093U, 2309026361U, 2308810601U, + 2308595363U, 2308379243U, 2308164263U, 2307949739U, 2307733583U, + 2307514733U, 2307299173U, 2307083393U, 2306868197U, 2306651671U, + 2306436793U, 2306223461U, 2306007931U, 2305792133U, 2305573537U, + 2305358221U, 2305141999U, 2304925529U, 2304710599U, 2304495799U, + 2304279137U, 2304063901U, 2303847761U, 2303633251U, 2303417483U, + 2303201833U, 2302986457U, 2302770469U, 2302556077U, 2302338421U, + 2302121279U, 2301906433U, 2301689417U, 2301475069U, 2301260047U, + 2301042587U, 2300826287U, 2300609203U, 2300394193U, 2300180731U, + 2299964179U, 2299748471U, 2299534609U, 2299320679U, 2299105141U, + 2298888577U, 2298672281U, 2298456929U, 2298242797U, 2298027227U, + 2297811077U, 2297594521U, 2297378177U, 2297160329U, 2296945369U, + 2296729447U, 2296513621U, 2296300339U, 2296084877U, 2295871601U, + 2295656147U, 2295440813U, 2295224741U, 2295008923U, 2294792809U, + 2294578633U, 2294364481U, 2294148251U, 2293932703U, 2293718041U, + 2293502089U, 2293287109U, 2293071899U, 2292855451U, 2292641287U, + 2292422921U, 2292208781U, 2291993437U, 2291777737U, 2291564321U, + 2291348981U, 2291133973U, 2290918037U, 2290702693U, 2290489129U, + 2290270789U, 2290053737U, 2289838373U, 2289621101U, 2289405653U, + 2289190741U, 2288976737U, 2288762257U, 2288547733U, 2288330609U, + 2288117243U, 2287900829U, 2287686169U, 2287468607U, 2287251751U, + 2287037479U, 2286824389U, 2286608047U, 2286394637U, 2286182329U, + 2285966717U, 2285752123U, 2285536247U, 2285320237U, 2285106023U, + 2284891771U, 2284674407U, 2284457257U, 2284241537U, 2284026853U, + 2283811573U, 2283596327U, 2283380261U, 2283161161U, 2282946331U, + 2282730977U, 2282518223U, 2282301737U, 2282084897U, 2281870651U, + 2281654673U, 2281437143U, 2281221827U, 2281004771U, 2280789233U, + 2280573557U, 2280359363U, 2280142591U, 2279927491U, 2279711261U, + 2279494291U, 2279276653U, 2279060527U, 2278846901U, 2278628909U, + 2278411781U, 2278196407U, 2277980993U, 2277763753U, 2277549089U, + 2277334771U, 2277118411U, 2276902399U, 2276688613U, 2276472853U, + 2276256329U, 2276042711U, 2275828517U, 2275612679U, 2275397063U, + 2275181479U, 2274965159U, 2274748517U, 2274535463U, 2274319609U, + 2274107327U, 2273891549U, 2273676997U, 2273462767U, 2273248399U, + 2273032639U, 2272818917U, 2272605253U, 2272389437U, 2272172081U, + 2271957209U, 2271743939U, 2271528041U, 2271313729U, 2271098429U, + 2270884471U, 2270669353U, 2270455567U, 2270240681U, 2270025151U, + 2269809527U, 2269596941U, 2269382131U, 2269165319U, 2268951577U, + 2268735797U, 2268517921U, 2268302123U, 2268086111U, 2267870603U, + 2267656903U, 2267442757U, 2267227777U, 2267012081U, 2266797487U, + 2266582793U, 2266368007U, 2266153339U, 2265938137U, 2265722351U, + 2265506083U, 2265290141U, 2265075049U, 2264860427U, 2264644769U, + 2264428451U, 2264214773U, 2263997711U, 2263782289U, 2263565729U, + 2263352327U, 2263137001U, 2262920839U, 2262705761U, 2262492191U, + 2262278069U, 2262062813U, 2261848051U, 2261633197U, 2261418409U, + 2261204657U, 2260990273U, 2260774759U, 2260560277U, 2260345247U, + 2260129169U, 2259914563U, 2259700207U, 2259484361U, 2259267151U, + 2259053309U, 2258839753U, 2258625431U, 2258409821U, 2258192591U, + 2257975997U, 2257761001U, 2257544407U, 2257329817U, 2257113083U, + 2256895787U, 2256679597U, 2256466463U, 2256251911U, 2256035759U, + 2255819249U, 2255604433U, 2255387119U, 2255171729U, 2254957261U, + 2254742569U, 2254525633U, 2254311419U, 2254096151U, 2253881089U, + 2253665009U, 2253448303U, 2253232537U, 2253017629U, 2252801377U, + 2252586353U, 2252370139U, 2252154943U, 2251940153U, 2251724287U, + 2251508141U, 2251293211U, 2251080107U, 2250864989U, 2250650741U, + 2250437317U, 2250221147U, 2250007937U, 2249792849U, 2249577443U, + 2249360747U, 2249143511U, 2248928303U, 2248714289U, 2248500389U, + 2248282607U, 2248066363U, 2247851681U, 2247636583U, 2247421817U, + 2247207073U, 2246990947U, 2246775449U, 2246560403U, 2246348051U, + 2246132507U, 2245917799U, 2245703177U, 2245488887U, 2245273741U, + 2245058089U, 2244843721U, 2244629719U, 2244412999U, 2244197437U, + 2243982737U, 2243769653U, 2243551433U, 2243337457U, 2243120419U, + 2242904581U, 2242688449U, 2242473991U, 2242259861U, 2242043599U, + 2241825133U, 2241609701U, 2241395071U, 2241180787U, 2240967343U, + 2240751923U, 2240536327U, 2240319527U, 2240105237U, 2239888687U, + 2239674629U, 2239458203U, 2239244101U, 2239028387U, 2238815521U, + 2238600541U, 2238383569U, 2238167417U, 2237952851U, 2237735261U, + 2237518081U, 2237301083U, 2237088229U, 2236873019U, 2236658693U, + 2236444453U, 2236229201U, 2236016201U, 2235800159U, 2235586427U, + 2235370021U, 2235154721U, 2234939537U, 2234725013U, 2234510909U, + 2234295191U, 2234081099U, 2233866847U, 2233652459U, 2233436629U, + 2233218679U, 2233003183U, 2232789619U, 2232571813U, 2232355067U, + 2232138367U, 2231922923U, 2231708449U, 2231493413U, 2231277413U, + 2231061221U, 2230846967U, 2230632791U, 2230417751U, 2230201531U, + 2229985133U, 2229769579U, 2229554461U, 2229340651U, 2229128767U, + 2228912453U, 2228698319U, 2228481883U, 2228267953U, 2228051513U, + 2227836329U, 2227622203U, 2227408321U, 2227192519U, 2226974441U, + 2226760573U, 2226547241U, 2226332261U, 2226116807U, 2225900503U, + 2225684207U, 2225468123U, 2225253677U, 2225039759U, 2224826473U, + 2224610537U, 2224393937U, 2224179077U, 2223962707U, 2223747133U, + 2223531173U, 2223316279U, 2223098953U, 2222882659U, 2222668169U, + 2222453179U, 2222236673U, 2222020433U, 2221805137U, 2221591007U, + 2221375883U, 2221160077U, 2220945563U, 2220729323U, 2220513517U, + 2220299443U, 2220085447U, 2219871361U, 2219657239U, 2219440397U, + 2219226643U, 2219013089U, 2218798327U, 2218581803U, 2218365979U, + 2218151977U, 2217936223U, 2217720587U, 2217503231U, 2217288769U, + 2217073951U, 2216859137U, 2216643199U, 2216429123U, 2216217607U, + 2216003639U, 2215785851U, 2215570163U, 2215356079U, 2215137607U, + 2214921911U, 2214707081U, 2214490303U, 2214276599U, 2214059119U, + 2213841127U, 2213626687U, 2213409799U, 2213195329U, 2212980269U, + 2212766779U, 2212554011U, 2212339553U, 2212125329U, 2211910373U, + 2211695159U, 2211479729U, 2211262793U, 2211046499U, 2210831927U, + 2210615761U, 2210401003U, 2210185847U, 2209971091U, 2209755451U, + 2209536949U, 2209322803U, 2209108799U, 2208892547U, 2208677441U, + 2208463339U, 2208247117U, 2208034453U, 2207819147U, 2207604541U, + 2207391643U, 2207176733U, 2206959901U, 2206745909U, 2206531433U, + 2206317367U, 2206101241U, 2205886327U, 2205671543U, 2205456833U, + 2205243319U, 2205027023U, 2204811307U, 2204595641U, 2204379659U, + 2204165801U, 2203948541U, 2203733117U, 2203517681U, 2203300223U, + 2203086371U, 2202871961U, 2202654689U, 2202436493U, 2202221279U, + 2202004547U, 2201791373U, 2201574377U, 2201360167U, 2201145061U, + 2200928497U, 2200714381U, 2200498441U, 2200281751U, 2200068601U, + 2199853559U, 2199635749U, 2199418691U, 2199204421U, 2198990219U, + 2198773793U, 2198559829U, 2198343977U, 2198127923U, 2197912859U, + 2197698263U, 2197483471U, 2197269587U, 2197052761U, 2196839891U, + 2196623977U, 2196407699U, 2196193177U, 2195978129U, 2195763049U, + 2195548093U, 2195333801U, 2195118769U, 2194903967U, 2194689127U, + 2194475233U, 2194259981U, 2194045093U, 2193829657U, 2193615779U, + 2193400303U, 2193183463U, 2192968597U, 2192753141U, 2192540993U, + 2192325229U, 2192109989U, 2191894543U, 2191680791U, 2191463497U, + 2191249147U, 2191034509U, 2190820267U, 2190606317U, 2190390899U, + 2190174199U, 2189958893U, 2189743967U, 2189528807U, 2189313311U, + 2189096633U, 2188880977U, 2188665929U, 2188452439U, 2188238047U, + 2188022989U, 2187806953U, 2187592339U, 2187375787U, 2187160567U, + 2186947853U, 2186734469U, 2186520907U, 2186305777U, 2186090447U, + 2185874939U, 2185660657U, 2185444423U, 2185228519U, 2185014731U, + 2184798521U, 2184583937U, 2184368803U, 2184153427U, 2183937773U, + 2183724187U, 2183508791U, 2183292037U, 2183077639U, 2182862839U, + 2182647839U, 2182430443U, 2182214731U, 2181997007U, 2181781843U, + 2181567317U, 2181352403U, 2181134429U, 2180919913U, 2180705173U, + 2180489261U, 2180274289U, 2180059613U, 2179844789U, 2179628147U, + 2179411453U, 2179195943U, 2178981173U, 2178765881U, 2178552247U, + 2178338983U, 2178124589U, 2177911657U, 2177695537U, 2177480443U, + 2177264501U, 2177048869U, 2176833577U, 2176622813U, 2176405919U, + 2176191037U, 2175977563U, 2175761669U, 2175546547U, 2175332921U, + 2175118607U, 2174905169U, 2174691347U, 2174474537U, 2174260867U, + 2174044051U, 2173830367U, 2173613773U, 2173400321U, 2173182191U, + 2172969907U, 2172756941U, 2172541463U, 2172324157U, 2172107263U, + 2171892293U, 2171676751U, 2171462441U, 2171245553U, 2171030177U, + 2170817087U, 2170603703U, 2170388111U, 2170175779U, 2169961919U, + 2169744097U, 2169531443U, 2169315259U, 2169100067U, 2168884763U, + 2168668939U, 2168454077U, 2168240089U, 2168025037U, 2167808509U, + 2167594523U, 2167378901U, 2167164107U, 2166947911U, 2166735047U, + 2166519647U, 2166305593U, 2166090191U, 2165877419U, 2165660327U, + 2165445811U, 2165231377U, 2165016067U, 2164800061U, 2164584337U, + 2164370653U, 2164156157U, 2163937541U, 2163722377U, 2163510857U, + 2163294317U, 2163076691U, 2162863051U, 2162648759U, 2162435339U, + 2162219417U, 2162005633U, 2161788371U, 2161572109U, 2161357039U, + 2161143913U, 2160930071U, 2160715201U, 2160498959U, 2160284281U, + 2160071057U, 2159857957U, 2159644441U, 2159431277U, 2159216399U, + 2158999463U, 2158783609U, 2158570681U, 2158353931U, 2158136809U, + 2157922717U, 2157706357U, 2157490921U, 2157278737U, 2157063401U, + 2156846201U, 2156631929U, 2156417051U, 2156202101U, 2155984819U, + 2155770917U, 2155555967U, 2155339559U, 2155125689U, 2154911813U, + 2154697789U, 2154481897U, 2154267373U, 2154053557U, 2153838251U, + 2153623891U, 2153409701U, 2153194049U, 2152977367U, 2152761631U, + 2152549747U, 2152334189U, 2152120979U, 2151905143U, 2151690707U, + 2151475523U, 2151261493U, 2151045469U, 2150830289U, 2150614667U, + 2150399893U, 2150187059U, 2149972697U, 2149756703U, 2149543889U, + 2149327627U, 2149112429U, 2148896411U, 2148679669U, 2148466009U, + 2148250061U, 2148035749U, 2147821513U, 2147607401U, 2147392201U, + 2147178329U, 2146961347U, 2146748057U, 2146533959U, 2146317191U, + 2146102477U, 2145889267U, 2145675289U, 2145460909U, 2145248167U, + 2145033001U, 2144818411U, 2144602787U, 2144389217U, 2144174281U, + 2143959581U, 2143744997U, 2143529491U, 2143314917U, 2143101241U, + 2142887399U, 2142671353U, 2142457117U, 2142240403U, 2142027137U, + 2141814319U, 2141596757U, 2141383633U, 2141168963U, 2140954709U, + 2140740733U, 2140527553U, 2140313443U, 2140096993U, 2139883771U, + 2139669449U, 2139456377U, 2139240409U, 2139025991U, 2138809969U, + 2138593397U, 2138376997U, 2138163977U, 2137948823U, 2137734017U, + 2137517407U, 2137301819U, 2137086989U, 2136872957U, 2136658427U, + 2136442873U, 2136229309U, 2136014159U, 2135798803U, 2135582873U, + 2135366899U, 2135151517U, 2134935289U, 2134721027U, 2134508581U, + 2134293869U, 2134076557U, 2133860653U, 2133647933U, 2133431987U, + 2133216271U, 2133000449U, 2132785727U, 2132571839U, 2132356769U, + 2132141177U, 2131927409U, 2131711019U, 2131494667U, 2131280273U, + 2131062221U, 2130845993U, 2130632453U, 2130418541U, 2130203653U, + 2129987053U, 2129772677U, 2129556967U, 2129342653U, 2129127817U, + 2128912277U, 2128695007U, 2128478327U, 2128264429U, 2128050467U, + 2127837703U, 2127623801U, 2127408931U, 2127193907U, 2126978179U, + 2126761667U, 2126547263U, 2126332057U, 2126115379U, 2125901263U, + 2125684789U, 2125470601U, 2125257157U, 2125041631U, 2124825877U, + 2124610991U, 2124395233U, 2124182597U, 2123968739U, 2123753647U, + 2123537153U, 2123322571U, 2123108069U, 2122892371U, 2122672733U, + 2122457621U, 2122243469U, 2122030279U, 2121815011U, 2121602663U, + 2121386779U, 2121170593U, 2120957849U, 2120743579U, 2120527163U, + 2120310461U, 2120094611U, 2119880879U, 2119665617U, 2119452541U, + 2119237949U, 2119023493U, 2118807931U, 2118592439U, 2118377557U, + 2118162689U, 2117948653U, 2117734709U, 2117518787U, 2117303467U, + 2117087933U, 2116872119U, 2116657061U, 2116443677U, 2116230829U, + 2116016173U, 2115801371U, 2115585181U, 2115369701U, 2115153727U, + 2114938379U, 2114722927U, 2114507833U, 2114296181U, 2114083091U, + 2113870123U, 2113654157U, 2113441021U, 2113224103U, 2113012547U, + 2112798203U, 2112583841U, 2112367709U, 2112151631U, 2111937301U, + 2111724911U, 2111509861U, 2111295701U, 2111081629U, 2110866419U, + 2110651363U, 2110438397U, 2110223261U, 2110009829U, 2109797897U, + 2109582913U, 2109369523U, 2109152387U, 2108937829U, 2108720821U, + 2108508851U, 2108295751U, 2108080607U, 2107865293U, 2107650091U, + 2107436741U, 2107222657U, 2107007647U, 2106792673U, 2106576917U, + 2106359917U, 2106144197U, 2105930401U, 2105715049U, 2105501309U, + 2105287433U, 2105073029U, 2104858771U, 2104647023U, 2104433021U, + 2104219151U, 2104005019U, 2103788759U, 2103574393U, 2103359521U, + 2103143461U, 2102929097U, 2102714129U, 2102500709U, 2102287063U, + 2102071733U, 2101858169U, 2101644367U, 2101430251U, 2101215421U, + 2101000631U, 2100786707U, 2100573677U, 2100356977U, 2100144953U, + 2099929943U, 2099714203U, 2099498983U, 2099284679U, 2099070541U, + 2098855537U, 2098641661U, 2098426349U, 2098211051U, 2097996079U, + 2097777797U, 2097563203U, 2097349259U, 2097134239U, 2096920559U, + 2096705759U, 2096492033U, 2096275873U, 2096060987U, 2095845113U, + 2095630739U, 2095417099U, 2095204193U, 2094990617U, 2094777257U, + 2094563689U, 2094349931U, 2094135709U, 2093917997U, 2093703973U, + 2093489929U, 2093275181U, 2093060483U, 2092847143U, 2092631617U, + 2092415669U, 2092200577U, 2091986231U, 2091773147U, 2091560467U, + 2091343981U, 2091128869U, 2090914373U, 2090697439U, 2090484707U, + 2090271769U, 2090056609U, 2089841513U, 2089626109U, 2089413709U, + 2089199999U, 2088986687U, 2088770249U, 2088557147U, 2088342253U, + 2088126977U, 2087912909U, 2087700257U, 2087485703U, 2087269703U, + 2087054653U, 2086840409U, 2086626083U, 2086411141U, 2086194871U, + 2085979487U, 2085764441U, 2085549139U, 2085334943U, 2085119369U, + 2084905873U, 2084691677U, 2084475109U, 2084259323U, 2084044163U, + 2083831573U, 2083616219U, 2083402001U, 2083186583U, 2082971789U, + 2082759373U, 2082545177U, 2082330127U, 2082117649U, 2081901823U, + 2081688289U, 2081474251U, 2081261443U, 2081046613U, 2080831771U, + 2080617281U, 2080400599U, 2080186891U, 2079971801U, 2079758281U, + 2079542903U, 2079328387U, 2079114383U, 2078897809U, 2078683337U, + 2078472707U, 2078257351U, 2078045183U, 2077830827U, 2077616641U, + 2077400671U, 2077185667U, 2076969607U, 2076755251U, 2076538223U, + 2076323617U, 2076108059U, 2075893903U, 2075679917U, 2075462471U, + 2075249549U, 2075035973U, 2074823669U, 2074609139U, 2074395527U, + 2074179623U, 2073964481U, 2073751951U, 2073538321U, 2073326219U, + 2073110059U, 2072896093U, 2072680901U, 2072466947U, 2072251847U, + 2072036851U, 2071820351U, 2071608421U, 2071392137U, 2071176323U, + 2070961337U, 2070746221U, 2070532231U, 2070319253U, 2070103601U, + 2069889037U, 2069675147U, 2069458541U, 2069244319U, 2069030893U, + 2068817347U, 2068602559U, 2068387669U, 2068172839U, 2067958549U, + 2067743423U, 2067529463U, 2067313427U, 2067097567U, 2066881273U, + 2066666963U, 2066452979U, 2066238739U, 2066026559U, 2065812179U, + 2065594439U, 2065379831U, 2065165519U, 2064950903U, 2064736903U, + 2064522697U, 2064309791U, 2064095249U, 2063882111U, 2063669011U, + 2063454871U, 2063240269U, 2063025931U, 2062811071U, 2062597567U, + 2062384199U, 2062167797U, 2061955403U, 2061740983U, 2061522713U, + 2061310241U, 2061094153U, 2060880043U, 2060665253U, 2060449087U, + 2060235917U, 2060020987U, 2059806971U, 2059590917U, 2059377119U, + 2059160731U, 2058946231U, 2058731617U, 2058517511U, 2058304147U, + 2058088283U, 2057873417U, 2057656157U, 2057439991U, 2057225377U, + 2057011381U, 2056797829U, 2056582037U, 2056367063U, 2056152523U, + 2055938219U, 2055726181U, 2055511897U, 2055295643U, 2055080669U, + 2054867093U, 2054653849U, 2054438983U, 2054223761U, 2054008921U, + 2053794817U, 2053582747U, 2053368827U, 2053151159U, 2052935029U, + 2052719261U, 2052503023U, 2052290129U, 2052077113U, 2051862493U, + 2051648983U, 2051433383U, 2051217811U, 2051001461U, 2050788151U, + 2050575347U, 2050360619U, 2050148801U, 2049934517U, 2049720053U, + 2049507997U, 2049295841U, 2049080531U, 2048866219U, 2048651251U, + 2048437513U, 2048223949U, 2048009279U, 2047791847U, 2047578653U, + 2047363049U, 2047149409U, 2046934993U, 2046720463U, 2046506843U, + 2046291199U, 2046077087U, 2045861539U, 2045647739U, 2045434463U, + 2045221103U, 2045007113U, 2044792049U, 2044576769U, 2044363891U, + 2044149299U, 2043936319U, 2043720761U, 2043504637U, 2043292763U, + 2043078641U, 2042866541U, 2042653213U, 2042438569U, 2042225033U, + 2042009527U, 2041792717U, 2041579739U, 2041363763U, 2041147879U, + 2040934349U, 2040718517U, 2040504493U, 2040289607U, 2040074797U, + 2039858837U, 2039645171U, 2039430467U, 2039216407U, 2039003861U, + 2038790651U, 2038576081U, 2038359943U, 2038146151U, 2037932623U, + 2037716911U, 2037503981U, 2037287653U, 2037073373U, 2036858851U, + 2036643893U, 2036429471U, 2036215387U, 2036000677U, 2035784449U, + 2035570907U, 2035354273U, 2035139747U, 2034925411U, 2034711461U, + 2034497363U, 2034284051U, 2034072233U, 2033859251U, 2033644259U, + 2033431303U, 2033216407U, 2033002691U, 2032786661U, 2032573117U, + 2032359227U, 2032146469U, 2031931939U, 2031718771U, 2031504173U, + 2031288319U, 2031072521U, 2030860333U, 2030646193U, 2030432291U, + 2030217193U, 2030003243U, 2029787321U, 2029573459U, 2029359097U, + 2029144891U, 2028930721U, 2028716447U, 2028500113U, 2028285971U, + 2028072061U, 2027854601U, 2027639671U, 2027425307U, 2027211397U, + 2026995167U, 2026782997U, 2026568471U, 2026352353U, 2026140001U, + 2025926909U, 2025711001U, 2025496607U, 2025283669U, 2025069139U, + 2024855797U, 2024642273U, 2024426897U, 2024211479U, 2024000453U, + 2023784047U, 2023568411U, 2023353641U, 2023137863U, 2022923561U, + 2022708829U, 2022496247U, 2022282133U, 2022068203U, 2021852201U, + 2021636473U, 2021423681U, 2021208647U, 2020993567U, 2020777973U, + 2020563967U, 2020350851U, 2020136771U, 2019921859U, 2019706397U, + 2019493009U, 2019277723U, 2019064589U, 2018850983U, 2018639201U, + 2018424713U, 2018208637U, 2017993009U, 2017777939U, 2017562731U, + 2017348253U, 2017134761U, 2016919963U, 2016705421U, 2016490933U, + 2016277763U, 2016063589U, 2015850721U, 2015637157U, 2015421799U, + 2015209013U, 2014994939U, 2014782433U, 2014566331U, 2014351637U, + 2014137989U, 2013925063U, 2013711647U, 2013499049U, 2013286763U, + 2013075139U, 2012859839U, 2012647649U, 2012431891U, 2012216867U, + 2012004413U, 2011791329U, 2011576517U, 2011362433U, 2011148519U, + 2010933593U, 2010720161U, 2010505199U, 2010290519U, 2010075337U, + 2009859959U, 2009645977U, 2009431447U, 2009218259U, 2009003429U, + 2008787149U, 2008574681U, 2008360573U, 2008145099U, 2007930259U, + 2007716329U, 2007502459U, 2007286573U, 2007071909U, 2006858713U, + 2006644403U, 2006430821U, 2006218061U, 2006003647U, 2005789979U, + 2005575623U, 2005364209U, 2005151389U, 2004935551U, 2004721613U, + 2004506423U, 2004292663U, 2004078577U, 2003863541U, 2003650409U, + 2003440357U, 2003225123U, 2003010937U, 2002796941U, 2002581443U, + 2002369483U, 2002153999U, 2001941651U, 2001729157U, 2001516353U, + 2001301853U, 2001088319U, 2000875991U, 2000662501U, 2000447263U, + 2000234189U, 2000021819U, 1999805713U, 1999591519U, 1999377031U, + 1999163767U, 1998946837U, 1998733271U, 1998518189U, 1998303647U, + 1998088991U, 1997874821U, 1997659667U, 1997445841U, 1997235533U, + 1997021729U, 1996806061U, 1996589219U, 1996372933U, 1996159237U, + 1995945257U, 1995733277U, 1995516739U, 1995302677U, 1995089477U, + 1994873599U, 1994659547U, 1994447443U, 1994233277U, 1994020141U, + 1993804573U, 1993591349U, 1993377929U, 1993161893U, 1992947581U, + 1992735991U, 1992521611U, 1992307687U, 1992093223U, 1991878487U, + 1991663129U, 1991450303U, 1991237041U, 1991022613U, 1990808779U, + 1990594729U, 1990379987U, 1990165141U, 1989950267U, 1989736093U, + 1989522463U, 1989308263U, 1989094451U, 1988879909U, 1988668001U, + 1988453771U, 1988239081U, 1988022431U, 1987809871U, 1987597069U, + 1987382933U, 1987166897U, 1986953041U, 1986741131U, 1986525991U, + 1986312707U, 1986097783U, 1985884553U, 1985668123U, 1985453983U, + 1985239303U, 1985025799U, 1984808653U, 1984596529U, 1984382563U, + 1984169507U, 1983958577U, 1983743011U, 1983527261U, 1983314681U, + 1983099403U, 1982885549U, 1982671441U, 1982456033U, 1982243303U, + 1982026903U, 1981813313U, 1981600333U, 1981386437U, 1981174301U, + 1980956819U, 1980744853U, 1980530767U, 1980316879U, 1980102307U, + 1979890327U, 1979675213U, 1979460403U, 1979246653U, 1979031823U, + 1978817069U, 1978604077U, 1978390889U, 1978178009U, 1977963947U, + 1977749701U, 1977534121U, 1977320621U, 1977108079U, 1976893027U, + 1976678113U, 1976464909U, 1976253337U, 1976037941U, 1975823131U, + 1975607279U, 1975395517U, 1975179749U, 1974966589U, 1974752149U, + 1974538739U, 1974325789U, 1974111697U, 1973900053U, 1973685503U, + 1973472451U, 1973255929U, 1973042179U, 1972827331U, 1972612991U, + 1972401703U, 1972186661U, 1971974149U, 1971760337U, 1971547093U, + 1971334973U, 1971122009U, 1970910197U, 1970696591U, 1970480849U, + 1970265071U, 1970049421U, 1969836083U, 1969621729U, 1969408369U, + 1969193627U, 1968979921U, 1968765377U, 1968552293U, 1968339173U, + 1968125447U, 1967912579U, 1967699759U, 1967485391U, 1967270213U, + 1967054437U, 1966839869U, 1966624633U, 1966410613U, 1966194941U, + 1965982463U, 1965767701U, 1965554191U, 1965341783U, 1965125849U, + 1964913271U, 1964698751U, 1964484989U, 1964271983U, 1964054333U, + 1963841857U, 1963626869U, 1963415351U, 1963201589U, 1962987557U, + 1962773513U, 1962559147U, 1962341369U, 1962128447U, 1961914793U, + 1961701477U, 1961488423U, 1961275501U, 1961060869U, 1960848299U, + 1960633061U, 1960417241U, 1960204229U, 1959988241U, 1959770467U, + 1959554581U, 1959344813U, 1959133037U, 1958918903U, 1958704933U, + 1958490823U, 1958275273U, 1958060563U, 1957848889U, 1957634227U, + 1957421957U, 1957206529U, 1956991991U, 1956777359U, 1956563137U, + 1956349627U, 1956136801U, 1955922713U, 1955709199U, 1955494259U, + 1955281897U, 1955067349U, 1954854449U, 1954638899U, 1954424539U, + 1954210151U, 1953996521U, 1953781757U, 1953568061U, 1953354313U, + 1953138323U, 1952924947U, 1952711471U, 1952499607U, 1952285947U, + 1952073337U, 1951860359U, 1951646947U, 1951429421U, 1951215599U, + 1951001777U, 1950789343U, 1950577147U, 1950364093U, 1950151409U, + 1949937593U, 1949722681U, 1949510449U, 1949296903U, 1949084747U, + 1948870019U, 1948653431U, 1948438379U, 1948225849U, 1948010171U, + 1947797431U, 1947584029U, 1947369353U, 1947156833U, 1946945327U, + 1946730593U, 1946516281U, 1946303641U, 1946090359U, 1945876957U, + 1945662233U, 1945447381U, 1945234493U, 1945019243U, 1944807173U, + 1944592619U, 1944378089U, 1944164279U, 1943952403U, 1943736161U, + 1943523271U, 1943309701U, 1943097553U, 1942884479U, 1942669921U, + 1942453361U, 1942239361U, 1942026481U, 1941812861U, 1941599599U, + 1941383267U, 1941169357U, 1940955971U, 1940740007U, 1940530087U, + 1940315623U, 1940101721U, 1939887941U, 1939671631U, 1939459111U, + 1939246339U, 1939030463U, 1938815773U, 1938601583U, 1938388579U, + 1938173087U, 1937959571U, 1937746337U, 1937530079U, 1937314759U, + 1937100097U, 1936885309U, 1936673131U, 1936458907U, 1936247077U, + 1936033289U, 1935819463U, 1935605239U, 1935390563U, 1935176689U, + 1934965691U, 1934751667U, 1934537677U, 1934322787U, 1934110439U, + 1933897331U, 1933680613U, 1933466789U, 1933253327U, 1933040761U, + 1932827927U, 1932614807U, 1932400721U, 1932186007U, 1931972417U, + 1931759197U, 1931545013U, 1931330741U, 1931116997U, 1930902073U, + 1930690271U, 1930477583U, 1930262641U, 1930050217U, 1929835819U, + 1929622771U, 1929410531U, 1929197299U, 1928981581U, 1928767499U, + 1928552657U, 1928340781U, 1928126819U, 1927911509U, 1927700891U, + 1927487371U, 1927272463U, 1927060243U, 1926846787U, 1926631963U, + 1926417281U, 1926202891U, 1925987633U, 1925774309U, 1925560577U, + 1925346653U, 1925132813U, 1924917391U, 1924703741U, 1924489667U, + 1924274753U, 1924061647U, 1923848099U, 1923635011U, 1923423013U, + 1923209657U, 1922995003U, 1922780593U, 1922567051U, 1922354261U, + 1922142449U, 1921923569U, 1921709773U, 1921496867U, 1921285153U, + 1921071419U, 1920855917U, 1920641953U, 1920426647U, 1920210139U, + 1919997463U, 1919784743U, 1919571817U, 1919357707U, 1919144197U, + 1918928327U, 1918716967U, 1918505287U, 1918288951U, 1918074289U, + 1917859243U, 1917645077U, 1917431177U, 1917217327U, 1917001897U, + 1916787517U, 1916575319U, 1916359751U, 1916145289U, 1915931917U, + 1915718513U, 1915503833U, 1915291013U, 1915078507U, 1914865129U, + 1914652417U, 1914438937U, 1914226511U, 1914012007U, 1913797597U, + 1913583341U, 1913369903U, 1913155711U, 1912942181U, 1912728781U, + 1912513847U, 1912300451U, 1912087831U, 1911873253U, 1911657779U, + 1911442763U, 1911231353U, 1911015773U, 1910802847U, 1910588893U, + 1910375063U, 1910162201U, 1909948321U, 1909733303U, 1909520323U, + 1909307419U, 1909093247U, 1908879877U, 1908664063U, 1908449857U, + 1908236677U, 1908022811U, 1907810987U, 1907598467U, 1907384467U, + 1907169083U, 1906953211U, 1906739209U, 1906525109U, 1906310951U, + 1906096999U, 1905884731U, 1905673373U, 1905457363U, 1905243209U, + 1905029017U, 1904816713U, 1904602537U, 1904389517U, 1904176861U, + 1903963189U, 1903749361U, 1903537567U, 1903322501U, 1903108331U, + 1902895109U, 1902682841U, 1902468143U, 1902255833U, 1902042173U, + 1901825033U, 1901610857U, 1901394977U, 1901180863U, 1900966337U, + 1900753301U, 1900539409U, 1900326377U, 1900115621U, 1899902029U, + 1899689683U, 1899477733U, 1899264779U, 1899050837U, 1898835283U, + 1898621423U, 1898407963U, 1898196023U, 1897983083U, 1897770997U, + 1897556651U, 1897344901U, 1897133809U, 1896919259U, 1896705157U, + 1896491041U, 1896277457U, 1896063769U, 1895850709U, 1895636689U, + 1895420279U, 1895208223U, 1894993829U, 1894782023U, 1894566353U, + 1894350527U, 1894137731U, 1893924589U, 1893710851U, 1893496691U, + 1893283459U, 1893069709U, 1892854861U, 1892641133U, 1892428999U, + 1892215747U, 1892003387U, 1891790491U, 1891579493U, 1891362449U, + 1891148263U, 1890934141U, 1890720857U, 1890507551U, 1890292267U, + 1890078847U, 1889865743U, 1889652253U, 1889438801U, 1889224241U, + 1889013617U, 1888800223U, 1888587439U, 1888373471U, 1888163867U, + 1887952039U, 1887737603U, 1887523223U, 1887309659U, 1887096331U, + 1886884289U, 1886670587U, 1886456149U, 1886240141U, 1886028191U, + 1885812587U, 1885599461U, 1885386431U, 1885172129U, 1884957803U, + 1884746813U, 1884531721U, 1884315151U, 1884102601U, 1883889043U, + 1883673413U, 1883458481U, 1883244703U, 1883033723U, 1882821439U, + 1882608839U, 1882393321U, 1882178719U, 1881963827U, 1881750943U, + 1881536119U, 1881320087U, 1881108149U, 1880896177U, 1880681953U, + 1880466319U, 1880252831U, 1880038367U, 1879824493U, 1879610081U, + 1879395409U, 1879181047U, 1878969739U, 1878756823U, 1878542957U, + 1878330583U, 1878116137U, 1877904227U, 1877689511U, 1877474453U, + 1877263457U, 1877050621U, 1876835243U, 1876622257U, 1876411883U, + 1876197749U, 1875985613U, 1875770417U, 1875554969U, 1875341953U, + 1875126829U, 1874913457U, 1874701039U, 1874489093U, 1874272849U, + 1874060159U, 1873846979U, 1873635529U, 1873421219U, 1873209713U, + 1872994463U, 1872782473U, 1872569861U, 1872355663U, 1872141379U, + 1871927711U, 1871713241U, 1871499821U, 1871282653U, 1871070701U, + 1870859063U, 1870646521U, 1870431113U, 1870216661U, 1870002733U, + 1869789989U, 1869578903U, 1869364733U, 1869150917U, 1868934923U, + 1868723261U, 1868509567U, 1868296949U, 1868082787U, 1867868263U, + 1867655113U, 1867441489U, 1867226723U, 1867011511U, 1866798541U, + 1866586681U, 1866375299U, 1866161233U, 1865946409U, 1865732599U, + 1865516353U, 1865304169U, 1865090393U, 1864877809U, 1864661059U, + 1864446949U, 1864231703U, 1864019951U, 1863806657U, 1863593309U, + 1863380551U, 1863168421U, 1862955293U, 1862742773U, 1862527981U, + 1862316163U, 1862102299U, 1861887043U, 1861671997U, 1861458811U, + 1861246481U, 1861033093U, 1860819593U, 1860606511U, 1860392983U, + 1860179969U, 1859966057U, 1859753327U, 1859537033U, 1859321609U, + 1859109403U, 1858896001U, 1858682179U, 1858468021U, 1858255141U, + 1858040617U, 1857826583U, 1857614989U, 1857401957U, 1857189121U, + 1856974877U, 1856761057U, 1856548943U, 1856334443U, 1856122343U, + 1855909711U, 1855697113U, 1855485559U, 1855272659U, 1855059971U, + 1854846797U, 1854633577U, 1854417667U, 1854205447U, 1853992741U, + 1853779349U, 1853563861U, 1853348593U, 1853135209U, 1852922107U, + 1852710059U, 1852494713U, 1852281311U, 1852068733U, 1851856651U, + 1851644933U, 1851430187U, 1851217127U, 1851003919U, 1850791277U, + 1850576047U, 1850363993U, 1850149817U, 1849934699U, 1849722047U, + 1849507193U, 1849292813U, 1849082251U, 1848865933U, 1848650597U, + 1848437771U, 1848223219U, 1848011083U, 1847798189U, 1847584031U, + 1847369309U, 1847155309U, 1846942483U, 1846728739U, 1846515617U, + 1846302167U, 1846089199U, 1845873173U, 1845658319U, 1845445027U, + 1845234277U, 1845021179U, 1844808467U, 1844594179U, 1844381387U, + 1844167673U, 1843954171U, 1843740683U, 1843527457U, 1843314307U, + 1843101739U, 1842889381U, 1842677059U, 1842463939U, 1842250661U, + 1842035359U, 1841822201U, 1841610737U, 1841396317U, 1841181707U, + 1840969279U, 1840756397U, 1840542703U, 1840329529U, 1840114021U, + 1839902681U, 1839690289U, 1839477257U, 1839262553U, 1839049451U, + 1838834191U, 1838622671U, 1838409107U, 1838193991U, 1837980367U, + 1837766683U, 1837552097U, 1837338709U, 1837126441U, 1836914561U, + 1836700787U, 1836487573U, 1836273797U, 1836060607U, 1835848667U, + 1835633953U, 1835420233U, 1835206981U, 1834993807U, 1834782097U, + 1834566973U, 1834353881U, 1834140647U, 1833926671U, 1833715579U, + 1833503561U, 1833293153U, 1833081637U, 1832866859U, 1832653061U, + 1832438771U, 1832224573U, 1832010209U, 1831797823U, 1831585487U, + 1831372853U, 1831157287U, 1830944299U, 1830730943U, 1830517193U, + 1830305447U, 1830091709U, 1829876317U, 1829662273U, 1829449411U, + 1829236631U, 1829023943U, 1828810271U, 1828596149U, 1828382207U, + 1828170133U, 1827959183U, 1827746581U, 1827532807U, 1827317861U, + 1827106199U, 1826891467U, 1826680879U, 1826467309U, 1826253997U, + 1826039113U, 1825825087U, 1825610833U, 1825397839U, 1825185599U, + 1824970999U, 1824757813U, 1824544453U, 1824331781U, 1824120253U, + 1823907461U, 1823694571U, 1823483819U, 1823269337U, 1823056657U, + 1822841029U, 1822628681U, 1822413007U, 1822199881U, 1821987077U, + 1821771307U, 1821559319U, 1821348401U, 1821133981U, 1820921497U, + 1820707351U, 1820492903U, 1820278483U, 1820065243U, 1819853467U, + 1819640743U, 1819428503U, 1819214503U, 1818999947U, 1818786679U, + 1818571829U, 1818358589U, 1818143609U, 1817931289U, 1817716661U, + 1817504939U, 1817292857U, 1817077921U, 1816863773U, 1816650911U, + 1816437629U, 1816224331U, 1816011343U, 1815798827U, 1815584137U, + 1815372683U, 1815158353U, 1814944921U, 1814730259U, 1814519281U, + 1814305679U, 1814091911U, 1813878061U, 1813665221U, 1813450559U, + 1813237159U, 1813022209U, 1812810889U, 1812598517U, 1812386621U, + 1812172727U, 1811959999U, 1811746201U, 1811532013U, 1811320249U, + 1811105171U, 1810891699U, 1810676641U, 1810464479U, 1810251841U, + 1810039403U, 1809825361U, 1809610937U, 1809398191U, 1809185471U, + 1808972351U, 1808760589U, 1808548033U, 1808335171U, 1808122291U, + 1807908719U, 1807695269U, 1807482529U, 1807269617U, 1807056437U, + 1806843373U, 1806629173U, 1806416483U, 1806203057U, 1805989663U, + 1805777483U, 1805564641U, 1805352947U, 1805137171U, 1804922843U, + 1804709029U, 1804496621U, 1804282919U, 1804070239U, 1803858137U, + 1803644209U, 1803430969U, 1803217879U, 1803004363U, 1802791009U, + 1802576609U, 1802366077U, 1802150351U, 1801937953U, 1801724581U, + 1801510229U, 1801298753U, 1801085947U, 1800871399U, 1800657197U, + 1800444797U, 1800231943U, 1800018919U, 1799806523U, 1799593049U, + 1799379191U, 1799166077U, 1798952293U, 1798742359U, 1798528609U, + 1798316879U, 1798103999U, 1797889399U, 1797677771U, 1797463951U, + 1797250849U, 1797038773U, 1796829191U, 1796613449U, 1796399977U, + 1796188403U, 1795976477U, 1795764959U, 1795551127U, 1795337413U, + 1795124281U, 1794911507U, 1794700001U, 1794488291U, 1794275677U, + 1794061361U, 1793848423U, 1793635369U, 1793420693U, 1793210383U, + 1792996691U, 1792784233U, 1792570531U, 1792358257U, 1792146007U, + 1791934237U, 1791723223U, 1791509171U, 1791295381U, 1791082301U, + 1790868851U, 1790656031U, 1790443537U, 1790230961U, 1790017003U, + 1789805027U, 1789593419U, 1789379479U, 1789164787U, 1788954239U, + 1788740491U, 1788525853U, 1788313313U, 1788099323U, 1787886053U, + 1787673467U, 1787459507U, 1787246339U, 1787034257U, 1786821557U, + 1786608137U, 1786394063U, 1786182059U, 1785967481U, 1785754219U, + 1785541067U, 1785328469U, 1785115117U, 1784902591U, 1784691409U, + 1784479457U, 1784264249U, 1784052359U, 1783837177U, 1783625471U, + 1783412083U, 1783199161U, 1782985577U, 1782774361U, 1782561791U, + 1782349147U, 1782135227U, 1781922349U, 1781707453U, 1781494499U, + 1781281357U, 1781067257U, 1780853203U, 1780641661U, 1780427603U, + 1780215917U, 1780004623U, 1779789901U, 1779579163U, 1779366067U, + 1779154763U, 1778941309U, 1778728537U, 1778516123U, 1778303041U, + 1778091787U, 1777879687U, 1777663243U, 1777451671U, 1777236971U, + 1777025297U, 1776810323U, 1776599551U, 1776385619U, 1776175129U, + 1775962709U, 1775748791U, 1775538503U, 1775324981U, 1775111743U, + 1774897037U, 1774682293U, 1774468921U, 1774256161U, 1774044773U, + 1773831989U, 1773617759U, 1773403967U, 1773190319U, 1772977307U, + 1772763497U, 1772549873U, 1772335879U, 1772125603U, 1771913347U, + 1771699337U, 1771487587U, 1771272023U, 1771059089U, 1770847583U, + 1770636541U, 1770423601U, 1770210877U, 1769994487U, 1769781749U, + 1769568701U, 1769356007U, 1769142241U, 1768928741U, 1768713641U, + 1768501909U, 1768289251U, 1768078313U, 1767865181U, 1767649771U, + 1767438721U, 1767226861U, 1767012337U, 1766798269U, 1766585551U, + 1766372479U, 1766160161U, 1765946669U, 1765734799U, 1765523477U, + 1765309201U, 1765095139U, 1764883123U, 1764672967U, 1764461749U, + 1764246829U, 1764032813U, 1763819731U, 1763606881U, 1763393377U, + 1763181727U, 1762969993U, 1762756637U, 1762543031U, 1762331981U, + 1762118279U, 1761903823U, 1761692489U, 1761477937U, 1761263827U, + 1761050773U, 1760839001U, 1760628371U, 1760413229U, 1760197709U, + 1759985173U, 1759773131U, 1759560839U, 1759348933U, 1759135717U, + 1758923039U, 1758710171U, 1758498877U, 1758285307U, 1758073949U, + 1757860073U, 1757647841U, 1757436281U, 1757222959U, 1757008063U, + 1756793993U, 1756581121U, 1756368917U, 1756154579U, 1755940577U, + 1755728027U, 1755514219U, 1755303233U, 1755091193U, 1754878501U, + 1754665361U, 1754454571U, 1754242561U, 1754030731U, 1753816681U, + 1753602211U, 1753389713U, 1753176443U, 1752964153U, 1752750449U, + 1752537337U, 1752324599U, 1752112291U, 1751899441U, 1751687213U, + 1751473417U, 1751261329U, 1751049169U, 1750837849U, 1750623913U, + 1750410733U, 1750198199U, 1749985409U, 1749773527U, 1749560107U, + 1749347723U, 1749135239U, 1748924363U, 1748710897U, 1748498359U, + 1748287217U, 1748070949U, 1747857149U, 1747644641U, 1747430963U, + 1747216301U, 1747002469U, 1746789469U, 1746578459U, 1746366119U, + 1746151037U, 1745939603U, 1745725207U, 1745513141U, 1745303071U, + 1745089651U, 1744877551U, 1744663763U, 1744451789U, 1744237181U, + 1744025083U, 1743814301U, 1743600853U, 1743387367U, 1743174197U, + 1742962841U, 1742749471U, 1742536847U, 1742322259U, 1742111281U, + 1741899253U, 1741687861U, 1741474171U, 1741258007U, 1741045811U, + 1740835949U, 1740621881U, 1740408053U, 1740196361U, 1739983067U, + 1739771023U, 1739558827U, 1739345351U, 1739134457U, 1738920671U, + 1738707163U, 1738494731U, 1738281847U, 1738067677U, 1737856069U, + 1737644603U, 1737432539U, 1737221611U, 1737006983U, 1736794487U, + 1736581619U, 1736369281U, 1736154647U, 1735943387U, 1735729111U, + 1735517011U, 1735305269U, 1735090199U, 1734876943U, 1734664441U, + 1734449077U, 1734237377U, 1734024737U, 1733811263U, 1733597969U, + 1733384509U, 1733171707U, 1732961677U, 1732746863U, 1732535537U, + 1732321049U, 1732108141U, 1731895523U, 1731682793U, 1731469843U, + 1731254191U, 1731041219U, 1730829523U, 1730618177U, 1730405549U, + 1730192197U, 1729976291U, 1729763383U, 1729549669U, 1729337327U, + 1729125011U, 1728914417U, 1728701587U, 1728488477U, 1728276799U, + 1728063221U, 1727849777U, 1727635841U, 1727422667U, 1727208947U, + 1726994957U, 1726783987U, 1726573733U, 1726361471U, 1726147603U, + 1725936371U, 1725724123U, 1725510341U, 1725297971U, 1725083699U, + 1724868617U, 1724657423U, 1724445431U, 1724230499U, 1724017907U, + 1723805329U, 1723596101U, 1723381903U, 1723167899U, 1722954017U, + 1722740653U, 1722527047U, 1722312811U, 1722102953U, 1721891051U, + 1721678617U, 1721466457U, 1721252303U, 1721040851U, 1720830509U, + 1720616329U, 1720403401U, 1720190291U, 1719977801U, 1719766823U, + 1719554429U, 1719342839U, 1719129833U, 1718917727U, 1718705621U, + 1718492519U, 1718278847U, 1718067781U, 1717854091U, 1717640279U, + 1717427989U, 1717216279U, 1717003237U, 1716788687U, 1716577411U, + 1716367007U, 1716156181U, 1715943997U, 1715731957U, 1715519549U, + 1715306557U, 1715093563U, 1714882331U, 1714670413U, 1714457677U, + 1714244459U, 1714031303U, 1713818269U, 1713604801U, 1713389563U, + 1713178517U, 1712965213U, 1712753267U, 1712539687U, 1712328841U, + 1712113927U, 1711899883U, 1711688063U, 1711475021U, 1711261333U, + 1711051409U, 1710837059U, 1710624329U, 1710413077U, 1710198703U, + 1709987243U, 1709773981U, 1709563153U, 1709351911U, 1709141977U, + 1708930331U, 1708718107U, 1708502867U, 1708290503U, 1708076729U, + 1707863831U, 1707652277U, 1707439001U, 1707227173U, 1707014329U, + 1706801633U, 1706589107U, 1706378419U, 1706166377U, 1705953643U, + 1705741783U, 1705531549U, 1705316959U, 1705106129U, 1704894109U, + 1704681709U, 1704468937U, 1704255689U, 1704045223U, 1703832359U, + 1703619641U, 1703405609U, 1703195113U, 1702983229U, 1702769197U, + 1702556957U, 1702344983U, 1702131659U, 1701917627U, 1701705373U, + 1701491459U, 1701278609U, 1701065897U, 1700854567U, 1700644447U, + 1700429513U, 1700217709U, 1700006197U, 1699793419U, 1699580317U, + 1699369627U, 1699155581U, 1698940723U, 1698727337U, 1698513253U, + 1698301307U, 1698091267U, 1697877743U, 1697664337U, 1697450791U, + 1697237897U, 1697025769U, 1696813771U, 1696599187U, 1696387493U, + 1696177811U, 1695964349U, 1695752273U, 1695539983U, 1695328517U, + 1695112499U, 1694901031U, 1694687689U, 1694475023U, 1694261953U, + 1694049001U, 1693835707U, 1693622737U, 1693410343U, 1693197481U, + 1692985631U, 1692774529U, 1692562093U, 1692348953U, 1692136417U, + 1691923169U, 1691710081U, 1691497571U, 1691284057U, 1691071279U, + 1690859791U, 1690645939U, 1690435493U, 1690223939U, 1690010563U, + 1689798259U, 1689584801U, 1689374539U, 1689162413U, 1688949023U, + 1688734417U, 1688524517U, 1688313817U, 1688102477U, 1687890049U, + 1687679137U, 1687466219U, 1687256309U, 1687042309U, 1686831407U, + 1686620363U, 1686407869U, 1686194189U, 1685982491U, 1685769949U, + 1685554763U, 1685339581U, 1685127391U, 1684918171U, 1684703561U, + 1684493633U, 1684280249U, 1684067551U, 1683855757U, 1683645311U, + 1683433723U, 1683221711U, 1683008251U, 1682796551U, 1682583167U, + 1682371753U, 1682155987U, 1681944119U, 1681733363U, 1681519849U, + 1681308011U, 1681098073U, 1680884237U, 1680671623U, 1680459233U, + 1680247291U, 1680031811U, 1679819293U, 1679605723U, 1679392699U, + 1679181041U, 1678968337U, 1678756411U, 1678543357U, 1678332811U, + 1678122869U, 1677911009U, 1677697997U, 1677485779U, 1677275011U, + 1677060713U, 1676850353U, 1676637649U, 1676424697U, 1676211011U, + 1676000453U, 1675787273U, 1675576393U, 1675363649U, 1675151339U, + 1674939241U, 1674727057U, 1674512789U, 1674299479U, 1674087917U, + 1673876467U, 1673661967U, 1673449919U, 1673235139U, 1673021521U, + 1672808327U, 1672596941U, 1672384589U, 1672173589U, 1671961757U, + 1671749039U, 1671536963U, 1671325529U, 1671112967U, 1670901179U, + 1670689117U, 1670475277U, 1670262637U, 1670051791U, 1669837633U, + 1669625107U, 1669414039U, 1669203233U, 1668990637U, 1668775393U, + 1668563849U, 1668350561U, 1668138847U, 1667926867U, 1667713757U, + 1667501833U, 1667287651U, 1667077777U, 1666863299U, 1666650637U, + 1666439549U, 1666227977U, 1666014149U, 1665800771U, 1665591229U, + 1665380273U, 1665168877U, 1664957753U, 1664744593U, 1664532421U, + 1664320123U, 1664105249U, 1663891367U, 1663680947U, 1663469519U, + 1663254757U, 1663042397U, 1662830083U, 1662618499U, 1662405971U, + 1662195949U, 1661984659U, 1661771983U, 1661559659U, 1661347057U, + 1661134081U, 1660921679U, 1660710313U, 1660497737U, 1660285441U, + 1660073287U, 1659859973U, 1659645607U, 1659431777U, 1659216851U, + 1659004939U, 1658794849U, 1658581553U, 1658372297U, 1658159369U, + 1657946183U, 1657734823U, 1657521973U, 1657309891U, 1657097159U, + 1656885457U, 1656674549U, 1656462763U, 1656251131U, 1656038099U, + 1655824243U, 1655613227U, 1655398643U, 1655187257U, 1654976711U, + 1654763909U, 1654550113U, 1654337563U, 1654125673U, 1653912119U, + 1653698759U, 1653486361U, 1653274141U, 1653059761U, 1652848279U, + 1652634989U, 1652424523U, 1652209519U, 1651998191U, 1651784759U, + 1651572101U, 1651359301U, 1651147033U, 1650934469U, 1650723083U, + 1650509953U, 1650298159U, 1650085873U, 1649872649U, 1649659841U, + 1649449441U, 1649235881U, 1649024249U, 1648812073U, 1648598869U, + 1648387141U, 1648175587U, 1647962123U, 1647750473U, 1647538483U, + 1647326743U, 1647114061U, 1646903021U, 1646688727U, 1646476903U, + 1646264027U, 1646051219U, 1645838983U, 1645628581U, 1645415971U, + 1645204021U, 1644993293U, 1644776921U, 1644563593U, 1644351343U, + 1644139267U, 1643924603U, 1643713501U, 1643499029U, 1643288453U, + 1643075813U, 1642860589U, 1642648877U, 1642437869U, 1642225457U, + 1642012793U, 1641801523U, 1641589661U, 1641376409U, 1641162559U, + 1640952241U, 1640741437U, 1640529173U, 1640318839U, 1640106227U, + 1639894213U, 1639681237U, 1639470661U, 1639257131U, 1639045273U, + 1638833389U, 1638619711U, 1638407233U, 1638194989U, 1637980541U, + 1637769223U, 1637559887U, 1637346769U, 1637134337U, 1636922267U, + 1636710653U, 1636499873U, 1636286867U, 1636076087U, 1635863939U, + 1635650407U, 1635436661U, 1635226577U, 1635015631U, 1634803927U, + 1634589751U, 1634378377U, 1634166799U, 1633954739U, 1633743409U, + 1633531651U, 1633318207U, 1633106641U, 1632897269U, 1632687919U, + 1632475811U, 1632263639U, 1632052379U, 1631839457U, 1631626849U, + 1631414489U, 1631202467U, 1630990519U, 1630778063U, 1630565177U, + 1630354853U, 1630143049U, 1629931943U, 1629719171U, 1629508193U, + 1629295721U, 1629082687U, 1628870843U, 1628660101U, 1628448221U, + 1628236867U, 1628023801U, 1627812029U, 1627600441U, 1627389431U, + 1627177001U, 1626962539U, 1626751979U, 1626539179U, 1626326791U, + 1626113729U, 1625903567U, 1625691247U, 1625478037U, 1625266073U, + 1625054153U, 1624841633U, 1624630261U, 1624417189U, 1624206053U, + 1623992599U, 1623781619U, 1623568949U, 1623354829U, 1623142987U, + 1622929513U, 1622718421U, 1622506999U, 1622294161U, 1622082901U, + 1621868393U, 1621658257U, 1621446997U, 1621235573U, 1621024253U, + 1620813553U, 1620603793U, 1620392623U, 1620180607U, 1619968247U, + 1619753719U, 1619541383U, 1619329603U, 1619117597U, 1618904627U, + 1618691989U, 1618479787U, 1618267333U, 1618055717U, 1617843229U, + 1617630947U, 1617417619U, 1617204377U, 1616993519U, 1616781559U, + 1616568367U, 1616356229U, 1616143759U, 1615933097U, 1615723597U, + 1615509367U, 1615297399U, 1615086917U, 1614874609U, 1614661459U, + 1614448681U, 1614236551U, 1614023113U, 1613812303U, 1613601079U, + 1613389003U, 1613176379U, 1612963951U, 1612751549U, 1612540789U, + 1612329503U, 1612118173U, 1611906383U, 1611695711U, 1611483151U, + 1611271957U, 1611057827U, 1610844611U, 1610632469U, 1610418559U, + 1610206529U, 1609994033U, 1609781203U, 1609569413U, 1609359209U, + 1609145459U, 1608933947U, 1608720361U, 1608508801U, 1608296717U, + 1608084109U, 1607870417U, 1607658197U, 1607445701U, 1607234537U, + 1607022997U, 1606810687U, 1606600679U, 1606388731U, 1606176347U, + 1605965227U, 1605752081U, 1605539021U, 1605328313U, 1605115663U, + 1604904061U, 1604693239U, 1604480057U, 1604268389U, 1604057183U, + 1603842913U, 1603631873U, 1603420561U, 1603210649U, 1603000219U, + 1602789143U, 1602577609U, 1602365857U, 1602153079U, 1601940149U, + 1601727781U, 1601517839U, 1601302363U, 1601090371U, 1600879667U, + 1600667899U, 1600455133U, 1600242403U, 1600031369U, 1599820517U, + 1599606803U, 1599396749U, 1599184751U, 1598975051U, 1598761279U, + 1598549501U, 1598335411U, 1598123407U, 1597911299U, 1597700057U, + 1597487621U, 1597277893U, 1597065859U, 1596852787U, 1596642133U, + 1596428957U, 1596216553U, 1596002173U, 1595792243U, 1595579933U, + 1595369533U, 1595158241U, 1594948063U, 1594737161U, 1594525729U, + 1594311107U, 1594098707U, 1593885151U, 1593671377U, 1593458753U, + 1593247781U, 1593035057U, 1592822603U, 1592610959U, 1592398513U, + 1592185459U, 1591975481U, 1591765501U, 1591554421U, 1591341443U, + 1591131319U, 1590920003U, 1590707633U, 1590494783U, 1590283363U, + 1590070931U, 1589859377U, 1589646811U, 1589434129U, 1589223187U, + 1589011031U, 1588799903U, 1588586047U, 1588375429U, 1588163957U, + 1587952687U, 1587741893U, 1587529987U, 1587318851U, 1587105677U, + 1586891203U, 1586680391U, 1586469947U, 1586257091U, 1586045543U, + 1585835543U, 1585622579U, 1585410503U, 1585198583U, 1584985397U, + 1584772169U, 1584559601U, 1584347197U, 1584135689U, 1583923169U, + 1583711639U, 1583501189U, 1583290279U, 1583078971U, 1582868279U, + 1582658101U, 1582445219U, 1582233599U, 1582020931U, 1581806959U, + 1581596773U, 1581385601U, 1581173551U, 1580962969U, 1580751941U, + 1580539157U, 1580325619U, 1580114611U, 1579903427U, 1579693151U, + 1579481467U, 1579268359U, 1579056379U, 1578842593U, 1578632179U, + 1578421843U, 1578209747U, 1577998151U, 1577787647U, 1577579093U, + 1577369909U, 1577155537U, 1576943099U, 1576730611U, 1576521313U, + 1576311547U, 1576100221U, 1575886001U, 1575674297U, 1575462277U, + 1575251819U, 1575039077U, 1574829143U, 1574617871U, 1574406947U, + 1574196319U, 1573984591U, 1573771307U, 1573558699U, 1573347103U, + 1573134727U, 1572923981U, 1572710869U, 1572499171U, 1572285719U, + 1572074671U, 1571864771U, 1571650979U, 1571438179U, 1571225417U, + 1571013593U, 1570801511U, 1570589539U, 1570376557U, 1570164923U, + 1569953963U, 1569742417U, 1569531179U, 1569320693U, 1569107899U, + 1568896783U, 1568684263U, 1568472599U, 1568261309U, 1568048311U, + 1567834613U, 1567622321U, 1567411583U, 1567200757U, 1566991141U, + 1566778691U, 1566568769U, 1566357157U, 1566143399U, 1565932283U, + 1565721347U, 1565509193U, 1565297891U, 1565085653U, 1564873847U, + 1564660499U, 1564447433U, 1564235279U, 1564021853U, 1563811489U, + 1563600547U, 1563390781U, 1563178303U, 1562966143U, 1562753519U, + 1562540341U, 1562328893U, 1562116663U, 1561904369U, 1561691323U, + 1561478873U, 1561266367U, 1561053881U, 1560842071U, 1560628519U, + 1560415321U, 1560203707U, 1559991437U, 1559780639U, 1559568349U, + 1559356307U, 1559145017U, 1558935383U, 1558724383U, 1558512313U, + 1558300649U, 1558088447U, 1557875689U, 1557664697U, 1557452837U, + 1557241417U, 1557027809U, 1556815321U, 1556607361U, 1556394971U, + 1556182799U, 1555972007U, 1555757803U, 1555547131U, 1555336427U, + 1555123693U, 1554912313U, 1554701053U, 1554488371U, 1554276719U, + 1554064399U, 1553854661U, 1553642743U, 1553430247U, 1553219651U, + 1553007349U, 1552796459U, 1552584197U, 1552373029U, 1552160453U, + 1551947497U, 1551736567U, 1551524531U, 1551312557U, 1551101779U, + 1550890007U, 1550680333U, 1550469667U, 1550258377U, 1550048537U, + 1549836947U, 1549626413U, 1549413953U, 1549202497U, 1548990721U, + 1548777619U, 1548566603U, 1548353953U, 1548143243U, 1547932783U, + 1547718707U, 1547508233U, 1547295949U, 1547084933U, 1546874491U, + 1546660861U, 1546449799U, 1546240771U, 1546029269U, 1545817543U, + 1545608279U, 1545395063U, 1545184891U, 1544973307U, 1544762029U, + 1544550919U, 1544340169U, 1544126369U, 1543917269U, 1543704583U, + 1543492921U, 1543278167U, 1543066607U, 1542855121U, 1542643969U, + 1542432631U, 1542220997U, 1542009797U, 1541798197U, 1541588329U, + 1541375651U, 1541164321U, 1540951459U, 1540741079U, 1540529233U, + 1540316951U, 1540104407U, 1539892303U, 1539682103U, 1539472589U, + 1539260353U, 1539048419U, 1538837119U, 1538625079U, 1538413381U, + 1538200369U, 1537988381U, 1537776257U, 1537564159U, 1537351003U, + 1537141829U, 1536930599U, 1536719453U, 1536509207U, 1536298567U, + 1536084287U, 1535872307U, 1535661467U, 1535448043U, 1535237141U, + 1535025673U, 1534813279U, 1534603751U, 1534391513U, 1534179809U, + 1533966341U, 1533756793U, 1533546401U, 1533334199U, 1533122693U, + 1532910019U, 1532698561U, 1532487683U, 1532274157U, 1532063317U, + 1531852901U, 1531640309U, 1531427567U, 1531215589U, 1531002287U, + 1530788503U, 1530577127U, 1530366421U, 1530154837U, 1529942443U, + 1529731897U, 1529522737U, 1529311841U, 1529103517U, 1528891963U, + 1528680841U, 1528467029U, 1528256663U, 1528046269U, 1527835061U, + 1527624487U, 1527413753U, 1527202763U, 1526992429U, 1526780881U, + 1526568913U, 1526357621U, 1526146381U, 1525935077U, 1525723673U, + 1525511483U, 1525301759U, 1525088857U, 1524876253U, 1524665299U, + 1524452729U, 1524241639U, 1524031711U, 1523819651U, 1523608943U, + 1523397277U, 1523184791U, 1522974181U, 1522761347U, 1522549627U, + 1522339421U, 1522130107U, 1521919109U, 1521705557U, 1521496439U, + 1521282947U, 1521071219U, 1520860261U, 1520647981U, 1520436857U, + 1520224591U, 1520013307U, 1519800533U, 1519589777U, 1519377709U, + 1519166063U, 1518957403U, 1518747859U, 1518537569U, 1518326107U, + 1518115609U, 1517902261U, 1517689727U, 1517479627U, 1517268097U, + 1517056027U, 1516842331U, 1516630799U, 1516422581U, 1516211933U, + 1516000391U, 1515788333U, 1515576967U, 1515365569U, 1515154343U, + 1514942327U, 1514732293U, 1514522249U, 1514311637U, 1514100949U, + 1513888829U, 1513677317U, 1513464419U, 1513253267U, 1513040521U, + 1512829321U, 1512619337U, 1512406871U, 1512196163U, 1511984137U, + 1511773339U, 1511559821U, 1511349289U, 1511138999U, 1510926353U, + 1510713947U, 1510500547U, 1510288337U, 1510077571U, 1509863603U, + 1509652121U, 1509441179U, 1509226711U, 1509014431U, 1508801669U, + 1508591653U, 1508381621U, 1508170903U, 1507960691U, 1507750679U, + 1507539263U, 1507328419U, 1507115851U, 1506903271U, 1506692387U, + 1506480763U, 1506267967U, 1506056749U, 1505847173U, 1505635909U, + 1505425291U, 1505215927U, 1505005493U, 1504793657U, 1504581619U, + 1504371229U, 1504162333U, 1503952867U, 1503740867U, 1503529823U, + 1503316649U, 1503105971U, 1502893967U, 1502682551U, 1502471153U, + 1502260021U, 1502047271U, 1501834643U, 1501623469U, 1501411771U, + 1501200923U, 1500989389U, 1500775873U, 1500565127U, 1500353909U, + 1500143621U, 1499932537U, 1499720281U, 1499508971U, 1499297563U, + 1499086661U, 1498874747U, 1498663967U, 1498451329U, 1498239949U, + 1498028803U, 1497818087U, 1497605653U, 1497394813U, 1497185497U, + 1496972819U, 1496762291U, 1496551181U, 1496339959U, 1496130263U, + 1495919351U, 1495706561U, 1495496021U, 1495283507U, 1495072847U, + 1494862697U, 1494651533U, 1494441001U, 1494230201U, 1494019927U, + 1493808817U, 1493596171U, 1493385767U, 1493174381U, 1492964443U, + 1492753439U, 1492542301U, 1492331219U, 1492120969U, 1491911543U, + 1491699217U, 1491487813U, 1491275839U, 1491064643U, 1490853697U, + 1490645441U, 1490435729U, 1490226733U, 1490013949U, 1489802617U, + 1489589581U, 1489379527U, 1489166039U, 1488954433U, 1488743299U, + 1488531413U, 1488320387U, 1488111187U, 1487900389U, 1487690467U, + 1487478497U, 1487267263U, 1487057459U, 1486847729U, 1486637849U, + 1486427429U, 1486216819U, 1486003891U, 1485793697U, 1485583139U, + 1485372797U, 1485160133U, 1484950217U, 1484741021U, 1484529037U, + 1484317111U, 1484106011U, 1483894001U, 1483681889U, 1483471441U, + 1483259819U, 1483049713U, 1482838807U, 1482628339U, 1482417641U, + 1482206351U, 1481995027U, 1481782711U, 1481570309U, 1481359603U, + 1481147693U, 1480933667U, 1480722539U, 1480513499U, 1480303739U, + 1480090541U, 1479879637U, 1479668173U, 1479455969U, 1479244651U, + 1479032449U, 1478822083U, 1478609551U, 1478399057U, 1478187493U, + 1477978231U, 1477768079U, 1477556897U, 1477346933U, 1477136621U, + 1476926603U, 1476715193U, 1476506771U, 1476293653U, 1476083051U, + 1475872933U, 1475662079U, 1475452523U, 1475242933U, 1475032721U, + 1474821919U, 1474611221U, 1474401239U, 1474190131U, 1473977039U, + 1473765289U, 1473553997U, 1473340133U, 1473130889U, 1472919583U, + 1472708987U, 1472498773U, 1472287043U, 1472077699U, 1471867637U, + 1471657441U, 1471446443U, 1471235713U, 1471023823U, 1470812389U, + 1470599993U, 1470390283U, 1470178133U, 1469966669U, 1469755801U, + 1469543599U, 1469330881U, 1469119987U, 1468907851U, 1468695629U, + 1468484929U, 1468273421U, 1468062059U, 1467851149U, 1467640763U, + 1467428411U, 1467217327U, 1467006161U, 1466794151U, 1466583073U, + 1466371843U, 1466160329U, 1465948373U, 1465736777U, 1465525723U, + 1465314119U, 1465102643U, 1464892417U, 1464680897U, 1464467821U, + 1464255641U, 1464045809U, 1463835853U, 1463624989U, 1463414549U, + 1463204381U, 1462995643U, 1462784161U, 1462573369U, 1462359733U, + 1462148579U, 1461938441U, 1461727649U, 1461517399U, 1461304841U, + 1461094379U, 1460884471U, 1460673547U, 1460463343U, 1460253167U, + 1460041901U, 1459830943U, 1459617227U, 1459408543U, 1459198619U, + 1458986429U, 1458775291U, 1458563719U, 1458353033U, 1458142883U, + 1457931973U, 1457721589U, 1457511773U, 1457299489U, 1457087893U, + 1456876859U, 1456666873U, 1456456499U, 1456244849U, 1456034231U, + 1455822019U, 1455611659U, 1455401117U, 1455191977U, 1454981797U, + 1454771543U, 1454560109U, 1454349367U, 1454137843U, 1453927427U, + 1453715761U, 1453504249U, 1453294127U, 1453081739U, 1452870073U, + 1452659729U, 1452448273U, 1452238709U, 1452026141U, 1451813369U, + 1451603563U, 1451391889U, 1451180063U, 1450969483U, 1450758469U, + 1450547621U, 1450334971U, 1450123639U, 1449913747U, 1449701947U, + 1449489913U, 1449279817U, 1449069893U, 1448857687U, 1448648989U, + 1448438279U, 1448227537U, 1448017553U, 1447806317U, 1447595869U, + 1447382917U, 1447174103U, 1446960607U, 1446749641U, 1446540443U, + 1446328439U, 1446119281U, 1445908159U, 1445699449U, 1445489839U, + 1445278733U, 1445068367U, 1444856983U, 1444646449U, 1444435033U, + 1444222807U, 1444011887U, 1443800339U, 1443587273U, 1443379013U, + 1443171043U, 1442957707U, 1442748763U, 1442539339U, 1442327533U, + 1442114507U, 1441904047U, 1441690351U, 1441476593U, 1441266361U, + 1441055647U, 1440847669U, 1440637277U, 1440426077U, 1440217231U, + 1440006509U, 1439794799U, 1439583407U, 1439374171U, 1439162957U, + 1438950691U, 1438740437U, 1438528463U, 1438318181U, 1438106513U, + 1437895027U, 1437681979U, 1437470873U, 1437259559U, 1437048287U, + 1436837653U, 1436626987U, 1436415569U, 1436205919U, 1435995373U, + 1435784563U, 1435572799U, 1435360867U, 1435150831U, 1434940153U, + 1434729199U, 1434520643U, 1434309757U, 1434099409U, 1433886089U, + 1433674607U, 1433466031U, 1433253691U, 1433041403U, 1432829141U, + 1432619269U, 1432407803U, 1432197869U, 1431984497U, 1431775249U, + 1431565097U, 1431356779U, 1431143009U, 1430932183U, 1430722303U, + 1430512469U, 1430300119U, 1430090093U, 1429879069U, 1429668403U, + 1429460267U, 1429249499U, 1429038931U, 1428829397U, 1428618013U, + 1428406739U, 1428195491U, 1427984963U, 1427775317U, 1427565439U, + 1427352851U, 1427142841U, 1426932539U, 1426720049U, 1426508137U, + 1426295809U, 1426083629U, 1425873301U, 1425663559U, 1425453457U, + 1425242501U, 1425033223U, 1424823151U, 1424609591U, 1424398769U, + 1424186873U, 1423976707U, 1423764707U, 1423554833U, 1423345877U, + 1423133431U, 1422924851U, 1422714019U, 1422502589U, 1422290981U, + 1422080969U, 1421869187U, 1421659849U, 1421447683U, 1421235259U, + 1421022943U, 1420814009U, 1420605029U, 1420395637U, 1420184053U, + 1419971947U, 1419759763U, 1419551207U, 1419341041U, 1419129991U, + 1418921551U, 1418709581U, 1418500289U, 1418290387U, 1418078429U, + 1417870807U, 1417660261U, 1417450193U, 1417239283U, 1417028629U, + 1416816109U, 1416605381U, 1416393973U, 1416184151U, 1415974367U, + 1415759791U, 1415548481U, 1415338993U, 1415127737U, 1414916513U, + 1414706081U, 1414496683U, 1414285841U, 1414075933U, 1413865723U, + 1413655609U, 1413443107U, 1413233803U, 1413023639U, 1412815031U, + 1412603749U, 1412393903U, 1412182423U, 1411972363U, 1411758683U, + 1411549081U, 1411338163U, 1411128419U, 1410915481U, 1410704203U, + 1410493127U, 1410282767U, 1410072823U, 1409859751U, 1409648803U, + 1409438881U, 1409228333U, 1409018059U, 1408806713U, 1408597321U, + 1408386337U, 1408174433U, 1407966977U, 1407755081U, 1407545411U, + 1407331943U, 1407121483U, 1406910187U, 1406702161U, 1406491811U, + 1406281687U, 1406072201U, 1405861619U, 1405649281U, 1405438123U, + 1405227907U, 1405017281U, 1404804259U, 1404592459U, 1404382807U, + 1404170093U, 1403960413U, 1403749219U, 1403539117U, 1403328253U, + 1403117977U, 1402907347U, 1402696543U, 1402487101U, 1402274179U, + 1402063451U, 1401852989U, 1401641771U, 1401431819U, 1401220687U, + 1401008503U, 1400799527U, 1400586883U, 1400375531U, 1400164691U, + 1399955521U, 1399745411U, 1399536209U, 1399323823U, 1399113361U, + 1398902599U, 1398693211U, 1398480011U, 1398271157U, 1398059851U, + 1397849273U, 1397638597U, 1397427527U, 1397219311U, 1397008007U, + 1396796321U, 1396584877U, 1396373389U, 1396163933U, 1395953003U, + 1395742811U, 1395532583U, 1395320299U, 1395110599U, 1394900411U, + 1394691731U, 1394481623U, 1394269621U, 1394061323U, 1393848473U, + 1393637447U, 1393427027U, 1393216597U, 1393005013U, 1392793447U, + 1392582857U, 1392373667U, 1392162097U, 1391951017U, 1391739917U, + 1391531941U, 1391323799U, 1391112179U, 1390903231U, 1390693357U, + 1390480867U, 1390273177U, 1390061591U, 1389854443U, 1389644899U, + 1389435529U, 1389224101U, 1389013657U, 1388802889U, 1388590771U, + 1388379371U, 1388168759U, 1387959973U, 1387749851U, 1387538531U, + 1387326557U, 1387115207U, 1386903257U, 1386690259U, 1386480191U, + 1386269273U, 1386059749U, 1385850449U, 1385640629U, 1385426899U, + 1385217611U, 1385009077U, 1384797541U, 1384587221U, 1384376911U, + 1384166219U, 1383955427U, 1383743587U, 1383531871U, 1383321073U, + 1383109709U, 1382900023U, 1382688089U, 1382478193U, 1382270801U, + 1382059321U, 1381850683U, 1381640213U, 1381429349U, 1381218071U, + 1381008397U, 1380799099U, 1380588893U, 1380376549U, 1380165037U, + 1379956027U, 1379745391U, 1379534699U, 1379324861U, 1379115107U, + 1378903499U, 1378695559U, 1378484147U, 1378274273U, 1378062869U, + 1377849181U, 1377638539U, 1377427537U, 1377217271U, 1377005527U, + 1376795093U, 1376583451U, 1376372927U, 1376163917U, 1375954799U, + 1375744219U, 1375533587U, 1375323067U, 1375111141U, 1374901441U, + 1374690479U, 1374476767U, 1374266947U, 1374055327U, 1373845763U, + 1373635849U, 1373424677U, 1373214013U, 1373002481U, 1372792661U, + 1372582951U, 1372371989U, 1372160681U, 1371951631U, 1371740347U, + 1371530051U, 1371317737U, 1371107293U, 1370898161U, 1370689351U, + 1370478199U, 1370269447U, 1370059211U, 1369848439U, 1369638217U, + 1369428089U, 1369216799U, 1369007459U, 1368795163U, 1368583901U, + 1368373793U, 1368162869U, 1367952449U, 1367742331U, 1367532007U, + 1367321981U, 1367114009U, 1366899931U, 1366690271U, 1366478059U, + 1366267829U, 1366055539U, 1365846239U, 1365637037U, 1365426473U, + 1365217783U, 1365005639U, 1364797337U, 1364586019U, 1364374621U, + 1364163901U, 1363954373U, 1363745497U, 1363535959U, 1363324243U, + 1363115399U, 1362903431U, 1362693061U, 1362483347U, 1362272159U, + 1362061843U, 1361852521U, 1361642413U, 1361433547U, 1361222483U, + 1361011681U, 1360802489U, 1360590611U, 1360380881U, 1360171817U, + 1359961501U, 1359749983U, 1359539257U, 1359328409U, 1359117871U, + 1358908721U, 1358698249U, 1358486093U, 1358278799U, 1358066891U, + 1357857821U, 1357647553U, 1357437911U, 1357226729U, 1357017223U, + 1356807173U, 1356596411U, 1356385637U, 1356176741U, 1355964263U, + 1355755039U, 1355545183U, 1355336251U, 1355128459U, 1354919273U, + 1354708483U, 1354498751U, 1354287721U, 1354078309U, 1353870257U, + 1353661961U, 1353449791U, 1353240853U, 1353029723U, 1352821361U, + 1352612003U, 1352403421U, 1352193341U, 1351982417U, 1351771667U, + 1351559323U, 1351347821U, 1351136029U, 1350925787U, 1350716659U, + 1350507239U, 1350298679U, 1350086779U, 1349874391U, 1349663261U, + 1349453851U, 1349244133U, 1349031391U, 1348822213U, 1348612427U, + 1348402843U, 1348194559U, 1347983867U, 1347773291U, 1347559459U, + 1347350909U, 1347141193U, 1346933207U, 1346723429U, 1346514991U, + 1346305277U, 1346093471U, 1345883647U, 1345672399U, 1345461539U, + 1345252241U, 1345040321U, 1344829741U, 1344618323U, 1344407489U, + 1344196753U, 1343988967U, 1343780203U, 1343568277U, 1343355241U, + 1343147083U, 1342937987U, 1342728071U, 1342517987U, 1342307893U, + 1342097557U, 1341887003U, 1341675697U, 1341468683U, 1341261511U, + 1341050771U, 1340841889U, 1340632757U, 1340423269U, 1340211359U, + 1340001323U, 1339791269U, 1339578307U, 1339367231U, 1339154987U, + 1338943393U, 1338732971U, 1338525077U, 1338315793U, 1338103777U, + 1337891767U, 1337684981U, 1337475847U, 1337265647U, 1337056157U, + 1336846079U, 1336636783U, 1336427837U, 1336218349U, 1336009819U, + 1335798707U, 1335587749U, 1335378673U, 1335167833U, 1334957387U, + 1334748409U, 1334537419U, 1334327461U, 1334118859U, 1333910269U, + 1333701917U, 1333489019U, 1333276801U, 1333068907U, 1332859907U, + 1332650933U, 1332443591U, 1332235007U, 1332026453U, 1331816303U, + 1331608273U, 1331395193U, 1331182871U, 1330972241U, 1330765867U, + 1330554023U, 1330343453U, 1330131511U, 1329919051U, 1329708893U, + 1329498817U, 1329287497U, 1329079417U, 1328868181U, 1328658781U, + 1328450027U, 1328240899U, 1328029309U, 1327816559U, 1327606783U, + 1327398283U, 1327186691U, 1326977819U, 1326767693U, 1326556859U, + 1326346837U, 1326137347U, 1325926681U, 1325717227U, 1325506499U, + 1325296927U, 1325087851U, 1324877819U, 1324667611U, 1324459139U, + 1324247699U, 1324035077U, 1323826727U, 1323617293U, 1323406849U, + 1323194489U, 1322982083U, 1322772643U, 1322561957U, 1322351603U, + 1322140619U, 1321930747U, 1321720937U, 1321512457U, 1321303331U, + 1321092109U, 1320882851U, 1320674917U, 1320465659U, 1320254339U, + 1320043337U, 1319834357U, 1319625709U, 1319414983U, 1319203747U, + 1318993883U, 1318785301U, 1318577279U, 1318366037U, 1318152007U, + 1317943181U, 1317732791U, 1317523841U, 1317314303U, 1317103897U, + 1316895257U, 1316685211U, 1316474221U, 1316265331U, 1316054891U, + 1315843693U, 1315632137U, 1315421413U, 1315208959U, 1314999743U, + 1314788777U, 1314578333U, 1314370261U, 1314159463U, 1313949479U, + 1313740369U, 1313531839U, 1313319703U, 1313108959U, 1312898203U, + 1312688057U, 1312479703U, 1312267717U, 1312058303U, 1311847529U, + 1311637417U, 1311426583U, 1311215863U, 1311006553U, 1310797487U, + 1310588473U, 1310377987U, 1310168747U, 1309958267U, 1309749391U, + 1309539499U, 1309329479U, 1309120567U, 1308910397U, 1308700637U, + 1308490721U, 1308281453U, 1308072991U, 1307865961U, 1307656717U, + 1307445779U, 1307237363U, 1307026261U, 1306817159U, 1306605631U, + 1306395403U, 1306185103U, 1305975263U, 1305767531U, 1305558109U, + 1305348797U, 1305139603U, 1304929123U, 1304720051U, 1304511617U, + 1304300269U, 1304090467U, 1303881353U, 1303671079U, 1303459217U, + 1303250287U, 1303040521U, 1302831029U, 1302621143U, 1302409819U, + 1302198973U, 1301989541U, 1301779541U, 1301570293U, 1301362219U, + 1301151557U, 1300942213U, 1300732399U, 1300522403U, 1300313351U, + 1300106153U, 1299895273U, 1299682561U, 1299472831U, 1299264649U, + 1299053519U, 1298843407U, 1298634643U, 1298425393U, 1298213723U, + 1298005127U, 1297796261U, 1297585661U, 1297373851U, 1297163779U, + 1296953461U, 1296743507U, 1296533111U, 1296323929U, 1296112973U, + 1295901839U, 1295691101U, 1295482039U, 1295272897U, 1295060023U, + 1294851017U, 1294641659U, 1294429363U, 1294219313U, 1294009729U, + 1293800581U, 1293592733U, 1293382037U, 1293171641U, 1292958059U, + 1292746541U, 1292537063U, 1292325929U, 1292117027U, 1291908257U, + 1291699309U, 1291488907U, 1291281083U, 1291071497U, 1290862493U, + 1290651811U, 1290443393U, 1290234571U, 1290025021U, 1289815477U, + 1289604307U, 1289395417U, 1289184679U, 1288975997U, 1288766833U, + 1288556921U, 1288348429U, 1288138339U, 1287928099U, 1287718339U, + 1287505741U, 1287295949U, 1287085523U, 1286875927U, 1286667689U, + 1286457461U, 1286249161U, 1286040269U, 1285833047U, 1285623533U, + 1285412059U, 1285202393U, 1284992759U, 1284780683U, 1284571111U, + 1284360967U, 1284151301U, 1283940841U, 1283732231U, 1283522021U, + 1283313019U, 1283104279U, 1282895363U, 1282682057U, 1282472407U, + 1282264663U, 1282053103U, 1281842747U, 1281633181U, 1281423527U, + 1281213191U, 1281003403U, 1280793589U, 1280583313U, 1280372719U, + 1280164439U, 1279955377U, 1279745221U, 1279534447U, 1279326287U, + 1279117223U, 1278905813U, 1278698909U, 1278491231U, 1278280687U, + 1278070979U, 1277860873U, 1277650267U, 1277440727U, 1277231077U, + 1277022427U, 1276813621U, 1276603609U, 1276392329U, 1276182547U, + 1275971579U, 1275761801U, 1275553781U, 1275343483U, 1275133991U, + 1274922373U, 1274710727U, 1274501663U, 1274294531U, 1274083753U, + 1273875037U, 1273665233U, 1273455991U, 1273245527U, 1273035679U, + 1272825977U, 1272615397U, 1272407239U, 1272197977U, 1271987671U, + 1271776811U, 1271566627U, 1271355739U, 1271148253U, 1270937953U, + 1270728527U, 1270517849U, 1270308241U, 1270098527U, 1269886873U, + 1269680053U, 1269470837U, 1269262321U, 1269054197U, 1268844481U, + 1268635651U, 1268427047U, 1268216891U, 1268006891U, 1267800031U, + 1267590887U, 1267381691U, 1267170791U, 1266961207U, 1266754579U, + 1266546143U, 1266337901U, 1266129401U, 1265918683U, 1265706697U, + 1265496943U, 1265288159U, 1265077771U, 1264869971U, 1264660013U, + 1264449523U, 1264238123U, 1264029539U, 1263820993U, 1263611597U, + 1263400771U, 1263193111U, 1262981519U, 1262772097U, 1262563301U, + 1262354279U, 1262142769U, 1261934431U, 1261723741U, 1261515029U, + 1261306933U, 1261099303U, 1260888019U, 1260676409U, 1260468359U, + 1260257827U, 1260050257U, 1259839093U, 1259629243U, 1259419391U, + 1259210399U, 1259001217U, 1258793857U, 1258585037U, 1258375523U, + 1258165679U, 1257955429U, 1257744953U, 1257534881U, 1257325829U, + 1257116669U, 1256905073U, 1256695789U, 1256486117U, 1256277961U, + 1256067493U, 1255856647U, 1255647719U, 1255437529U, 1255225837U, + 1255015369U, 1254806131U, 1254595753U, 1254386789U, 1254178421U, + 1253968913U, 1253758447U, 1253548619U, 1253338423U, 1253130479U, + 1252923073U, 1252715501U, 1252508093U, 1252297457U, 1252086653U, + 1251874859U, 1251664657U, 1251453971U, 1251246587U, 1251037709U, + 1250828521U, 1250619481U, 1250410003U, 1250200339U, 1249992089U, + 1249782367U, 1249573147U, 1249364279U, 1249156483U, 1248948131U, + 1248738089U, 1248528599U, 1248319139U, 1248109439U, 1247902109U, + 1247692639U, 1247481349U, 1247271547U, 1247063087U, 1246854223U, + 1246645307U, 1246435901U, 1246227581U, 1246018871U, 1245810227U, + 1245601571U, 1245392903U, 1245184243U, 1244973703U, 1244765047U, + 1244557333U, 1244346863U, 1244135653U, 1243927999U, 1243717823U, + 1243509257U, 1243298579U, 1243088681U, 1242879059U, 1242671167U, + 1242460357U, 1242246671U, 1242039277U, 1241829913U, 1241620693U, + 1241410673U, 1241202409U, 1240991117U, 1240782497U, 1240572649U, + 1240363273U, 1240153777U, 1239943217U, 1239734767U, 1239525311U, + 1239313181U, 1239103571U, 1238893823U, 1238684219U, 1238472803U, + 1238262409U, 1238054203U, 1237844537U, 1237634821U, 1237427551U, + 1237217627U, 1237009793U, 1236798539U, 1236589789U, 1236381481U, + 1236172387U, 1235964097U, 1235754187U, 1235545853U, 1235335271U, + 1235126447U, 1234917487U, 1234708621U, 1234500199U, 1234289923U, + 1234080811U, 1233871147U, 1233660019U, 1233451543U, 1233242953U, + 1233033727U, 1232823541U, 1232613331U, 1232402621U, 1232193211U, + 1231982483U, 1231772611U, 1231562147U, 1231353373U, 1231146467U, + 1230937441U, 1230727991U, 1230517793U, 1230311371U, 1230102737U, + 1229895523U, 1229684839U, 1229476231U, 1229268809U, 1229059703U, + 1228850041U, 1228638493U, 1228429607U, 1228220797U, 1228011221U, + 1227800507U, 1227590239U, 1227381409U, 1227172223U, 1226964671U, + 1226753419U, 1226542657U, 1226332829U, 1226122453U, 1225911629U, + 1225702547U, 1225493051U, 1225282477U, 1225072763U, 1224862213U, + 1224653371U, 1224442993U, 1224234727U, 1224025021U, 1223816687U, + 1223607443U, 1223398019U, 1223187829U, 1222978951U, 1222770077U, + 1222560371U, 1222351069U, 1222142459U, 1221933131U, 1221721819U, + 1221514477U, 1221302977U, 1221094829U, 1220885647U, 1220675699U, + 1220464283U, 1220254433U, 1220047229U, 1219838999U, 1219629767U, + 1219421089U, 1219213297U, 1219005551U, 1218797189U, 1218587507U, + 1218377591U, 1218168283U, 1217959759U, 1217750113U, 1217539289U, + 1217329511U, 1217123249U, 1216913377U, 1216703687U, 1216494469U, + 1216286101U, 1216077211U, 1215867539U, 1215660739U, 1215451949U, + 1215241673U, 1215031777U, 1214822281U, 1214612899U, 1214402617U, + 1214193439U, 1213983487U, 1213775221U, 1213567811U, 1213358513U, + 1213147499U, 1212936583U, 1212727433U, 1212520013U, 1212311081U, + 1212103577U, 1211893097U, 1211685161U, 1211473667U, 1211264987U, + 1211058197U, 1210849229U, 1210639567U, 1210431389U, 1210221599U, + 1210011203U, 1209802301U, 1209594917U, 1209386179U, 1209175673U, + 1208967143U, 1208757743U, 1208547889U, 1208338451U, 1208131159U, + 1207920361U, 1207710793U, 1207501777U, 1207294171U, 1207084621U, + 1206876179U, 1206669041U, 1206459521U, 1206249859U, 1206041953U, + 1205831299U, 1205622923U, 1205415979U, 1205207389U, 1204998191U, + 1204787341U, 1204578779U, 1204371323U, 1204162783U, 1203951167U, + 1203740099U, 1203532607U, 1203322357U, 1203111703U, 1202902793U, + 1202693599U, 1202485397U, 1202275051U, 1202065471U, 1201854851U, + 1201645231U, 1201434701U, 1201227581U, 1201018723U, 1200811463U, + 1200602569U, 1200391783U, 1200182749U, 1199970719U, 1199762611U, + 1199552531U, 1199343581U, 1199132707U, 1198924267U, 1198714327U, + 1198506821U, 1198298653U, 1198090477U, 1197882457U, 1197674893U, + 1197466163U, 1197256231U, 1197048563U, 1196838133U, 1196629429U, + 1196420011U, 1196211407U, 1196001601U, 1195792771U, 1195585481U, + 1195374319U, 1195164823U, 1194956393U, 1194748517U, 1194540509U, + 1194329251U, 1194120047U, 1193911993U, 1193703031U, 1193491619U, + 1193283407U, 1193075309U, 1192865567U, 1192657183U, 1192448381U, + 1192240703U, 1192030831U, 1191823163U, 1191612913U, 1191402739U, + 1191193649U, 1190984173U, 1190775451U, 1190564161U, 1190355941U, + 1190148107U, 1189939213U, 1189728121U, 1189519997U, 1189311247U, + 1189101713U, 1188892717U, 1188685703U, 1188475777U, 1188268001U, + 1188058351U, 1187849153U, 1187640917U, 1187433263U, 1187226367U, + 1187015953U, 1186805089U, 1186596007U, 1186388261U, 1186178297U, + 1185970603U, 1185761939U, 1185550823U, 1185341567U, 1185133997U, + 1184923501U, 1184713903U, 1184506039U, 1184297089U, 1184087273U, + 1183878329U, 1183669787U, 1183458817U, 1183250791U, 1183041817U, + 1182832331U, 1182623809U, 1182414503U, 1182205709U, 1181997067U, + 1181787179U, 1181577517U, 1181368277U, 1181158673U, 1180949249U, + 1180738123U, 1180528859U, 1180320989U, 1180111057U, 1179901351U, + 1179692753U, 1179482891U, 1179277469U, 1179068017U, 1178859497U, + 1178650687U, 1178442443U, 1178232611U, 1178021371U, 1177811227U, + 1177601077U, 1177390987U, 1177182557U, 1176975281U, 1176766693U, + 1176558433U, 1176348211U, 1176142267U, 1175934349U, 1175724499U, + 1175516383U, 1175305661U, 1175096981U, 1174887067U, 1174678643U, + 1174471559U, 1174261367U, 1174052647U, 1173844219U, 1173636703U, + 1173426931U, 1173217663U, 1173009319U, 1172799917U, 1172590231U, + 1172381857U, 1172174807U, 1171965953U, 1171758163U, 1171550299U, + 1171342357U, 1171133347U, 1170923531U, 1170715573U, 1170506611U, + 1170297743U, 1170087619U, 1169879033U, 1169673629U, 1169464913U, + 1169253593U, 1169046509U, 1168837333U, 1168628623U, 1168419073U, + 1168211003U, 1168001629U, 1167792499U, 1167582679U, 1167374083U, + 1167164641U, 1166955613U, 1166747363U, 1166538743U, 1166330059U, + 1166119189U, 1165910633U, 1165703027U, 1165492703U, 1165285949U, + 1165078643U, 1164868769U, 1164659869U, 1164451963U, 1164242549U, + 1164034369U, 1163827999U, 1163620747U, 1163411423U, 1163203091U, + 1162992989U, 1162784431U, 1162574671U, 1162365587U, 1162159013U, + 1161950299U, 1161741389U, 1161533117U, 1161327229U, 1161119857U, + 1160911247U, 1160702561U, 1160493413U, 1160284217U, 1160074693U, + 1159865429U, 1159657883U, 1159447573U, 1159238293U, 1159029413U, + 1158821291U, 1158610679U, 1158401791U, 1158192437U, 1157983051U, + 1157773979U, 1157566313U, 1157356867U, 1157148761U, 1156940111U, + 1156732697U, 1156522207U, 1156314457U, 1156105541U, 1155900293U, + 1155689329U, 1155480661U, 1155273419U, 1155064697U, 1154855899U, + 1154646653U, 1154436793U, 1154228027U, 1154020729U, 1153810711U, + 1153603991U, 1153394663U, 1153187417U, 1152978973U, 1152771073U, + 1152563249U, 1152353821U, 1152145993U, 1151938247U, 1151730473U, + 1151522587U, 1151315437U, 1151105951U, 1150895927U, 1150688501U, + 1150477577U, 1150271407U, 1150063381U, 1149855211U, 1149644887U, + 1149437147U, 1149227243U, 1149020567U, 1148810137U, 1148600951U, + 1148394769U, 1148185991U, 1147977247U, 1147768847U, 1147562491U, + 1147353859U, 1147143593U, 1146933899U, 1146724949U, 1146514861U, + 1146306919U, 1146100591U, 1145894003U, 1145683807U, 1145478899U, + 1145271119U, 1145060519U, 1144849163U, 1144640489U, 1144431487U, + 1144221607U, 1144014493U, 1143805609U, 1143596227U, 1143388151U, + 1143178501U, 1142967641U, 1142757263U, 1142548973U, 1142340253U, + 1142130797U, 1141922099U, 1141712267U, 1141504339U, 1141295399U, + 1141085873U, 1140875789U, 1140666523U, 1140455947U, 1140247531U, + 1140040739U, 1139831323U, 1139624011U, 1139414651U, 1139205901U, + 1138998829U, 1138789373U, 1138581187U, 1138373713U, 1138165307U, + 1137956741U, 1137749777U, 1137543557U, 1137334369U, 1137125887U, + 1136915501U, 1136704747U, 1136495683U, 1136285251U, 1136077577U, + 1135868191U, 1135660817U, 1135452361U, 1135244809U, 1135035169U, + 1134824861U, 1134615437U, 1134406519U, 1134197663U, 1133988629U, + 1133778851U, 1133568727U, 1133357807U, 1133149687U, 1132940047U, + 1132731473U, 1132524047U, 1132317119U, 1132109567U, 1131901469U, + 1131692797U, 1131482159U, 1131273667U, 1131064631U, 1130857417U, + 1130648083U, 1130439929U, 1130231803U, 1130021449U, 1129813459U, + 1129605619U, 1129394641U, 1129186661U, 1128976669U, 1128768803U, + 1128560591U, 1128354179U, 1128145127U, 1127938793U, 1127729279U, + 1127520491U, 1127310199U, 1127101757U, 1126891127U, 1126683491U, + 1126474469U, 1126268371U, 1126060379U, 1125850861U, 1125645503U, + 1125435653U, 1125228911U, 1125019937U, 1124810191U, 1124601029U, + 1124391427U, 1124181301U, 1123972217U, 1123763177U, 1123553309U, + 1123346023U, 1123136743U, 1122928627U, 1122720967U, 1122511417U, + 1122302417U, 1122093737U, 1121887787U, 1121678477U, 1121468987U, + 1121263597U, 1121054999U, 1120848263U, 1120639991U, 1120430299U, + 1120221979U, 1120012321U, 1119805361U, 1119597139U, 1119388597U, + 1119178637U, 1118973001U, 1118764489U, 1118557243U, 1118348449U, + 1118141587U, 1117932931U, 1117724207U, 1117513043U, 1117305067U, + 1117096891U, 1116887111U, 1116679621U, 1116471449U, 1116262709U, + 1116055631U, 1115846243U, 1115635361U, 1115427913U, 1115219251U, + 1115012053U, 1114803533U, 1114593659U, 1114385507U, 1114178473U, + 1113968143U, 1113762623U, 1113553663U, 1113347029U, 1113138293U, + 1112928077U, 1112717911U, 1112509877U, 1112301271U, 1112092691U, + 1111885717U, 1111677641U, 1111467271U, 1111260041U, 1111051927U, + 1110844181U, 1110635249U, 1110426409U, 1110217847U, 1110008941U, + 1109801263U, 1109592233U, 1109383721U, 1109176469U, 1108968821U, + 1108760137U, 1108551179U, 1108344191U, 1108137031U, 1107929003U, + 1107720883U, 1107514039U, 1107305911U, 1107098303U, 1106892403U, + 1106683751U, 1106474197U, 1106265071U, 1106056043U, 1105847839U, + 1105639783U, 1105429693U, 1105221853U, 1105013123U, 1104804509U, + 1104595663U, 1104387239U, 1104180157U, 1103972567U, 1103765197U, + 1103556331U, 1103348461U, 1103142101U, 1102933277U, 1102726543U, + 1102519267U, 1102313431U, 1102104473U, 1101895429U, 1101685861U, + 1101479651U, 1101268541U, 1101060229U, 1100852899U, 1100645999U, + 1100436301U, 1100227207U, 1100018219U, 1099811047U, 1099602997U, + 1099393643U, 1099185673U, 1098978599U, 1098770263U, 1098561227U, + 1098351797U, 1098144017U, 1097937167U, 1097728157U, 1097520947U, + 1097312089U, 1097103767U, 1096897601U, 1096689799U, 1096482011U, + 1096274651U, 1096066739U, 1095859199U, 1095650089U, 1095442963U, + 1095231623U, 1095024257U, 1094816797U, 1094609557U, 1094398931U, + 1094189693U, 1093980971U, 1093770611U, 1093563649U, 1093358719U, + 1093150999U, 1092943727U, 1092736243U, 1092527509U, 1092318377U, + 1092112319U, 1091904797U, 1091696719U, 1091489419U, 1091281019U, + 1091072471U, 1090864699U, 1090656817U, 1090447843U, 1090240531U, + 1090031741U, 1089824773U, 1089618017U, 1089409109U, 1089200053U, + 1088991263U, 1088783723U, 1088576893U, 1088365753U, 1088157073U, + 1087948157U, 1087740917U, 1087532689U, 1087324613U, 1087118537U, + 1086911729U, 1086703643U, 1086495727U, 1086288169U, 1086080651U, + 1085870603U, 1085664887U, 1085456423U, 1085247697U, 1085038519U, + 1084833017U, 1084624049U, 1084416631U, 1084208351U, 1084001693U, + 1083793349U, 1083585871U, 1083377047U, 1083170471U, 1082963663U, + 1082756149U, 1082546651U, 1082338427U, 1082131829U, 1081924471U, + 1081716761U, 1081511393U, 1081303913U, 1081096957U, 1080887629U, + 1080678889U, 1080469007U, 1080262063U, 1080055027U, 1079847971U, + 1079640707U, 1079432869U, 1079223599U, 1079014879U, 1078808681U, + 1078599227U, 1078390589U, 1078182643U, 1077975377U, 1077768583U, + 1077558403U, 1077350501U, 1077143029U, 1076934251U, 1076724241U, + 1076518097U, 1076309501U, 1076101567U, 1075893557U, 1075684787U, + 1075475461U, 1075267649U, 1075058701U, 1074849661U, 1074641677U, + 1074432679U, 1074225577U, 1074019853U, 1073811041U, 1073601887U, + 1073392231U, 1073184083U, 1072976483U, 1072767901U, 1072560497U, + 1072351633U, 1072144147U, 1071935113U, 1071728831U, 1071520193U, + 1071314423U, 1071105181U, 1070897921U, 1070692321U, 1070484431U, + 1070277881U, 1070069713U, 1069861379U, 1069652459U, 1069443377U, + 1069236671U, 1069029323U, 1068821141U, 1068613543U, 1068406421U, + 1068198277U, 1067990419U, 1067782787U, 1067575109U, 1067369003U, + 1067160917U, 1066953301U, 1066746419U, 1066536941U, 1066330519U, + 1066124239U, 1065916381U, 1065710047U, 1065502043U, 1065293909U, + 1065085093U, 1064875531U, 1064669233U, 1064464769U, 1064256913U, + 1064052889U, 1063841941U, 1063634183U, 1063429519U, 1063220489U, + 1063011779U, 1062803279U, 1062594389U, 1062385393U, 1062178993U, + 1061971153U, 1061765231U, 1061557109U, 1061348021U, 1061139697U, + 1060931147U, 1060724087U, 1060514333U, 1060306607U, 1060098943U, + 1059890033U, 1059683543U, 1059476063U, 1059268699U, 1059058799U, + 1058851631U, 1058644291U, 1058437243U, 1058228651U, 1058022887U, + 1057815553U, 1057607189U, 1057398107U, 1057191097U, 1056981413U, + 1056774827U, 1056567443U, 1056358829U, 1056150707U, 1055942477U, + 1055735311U, 1055524109U, 1055317657U, 1055108851U, 1054899821U, + 1054691531U, 1054482683U, 1054276051U, 1054070753U, 1053861643U, + 1053652829U, 1053443057U, 1053235811U, 1053029443U, 1052820511U, + 1052613781U, 1052407277U, 1052201207U, 1051991939U, 1051782857U, + 1051575347U, 1051368133U, 1051161451U, 1050953941U, 1050747079U, + 1050538583U, 1050331537U, 1050123911U, 1049915177U, 1049708141U, + 1049499391U, 1049291899U, 1049084801U, 1048875713U, 1048666351U, + 1048459133U, 1048250167U, 1048043951U, 1047834761U, 1047627271U, + 1047418517U, 1047210709U, 1047002123U, 1046793551U, 1046584937U, + 1046377229U, 1046170379U, 1045963277U, 1045755479U, 1045548289U, + 1045341391U, 1045131757U, 1044923059U, 1044714707U, 1044506663U, + 1044299353U, 1044089779U, 1043881469U, 1043675887U, 1043468333U, + 1043259947U, 1043052079U, 1042842733U, 1042636327U, 1042430009U, + 1042222837U, 1042014559U, 1041806749U, 1041601129U, 1041395071U, + 1041186929U, 1040977403U, 1040770943U, 1040561549U, 1040352769U, + 1040148119U, 1039940617U, 1039734901U, 1039527631U, 1039319389U, + 1039112171U, 1038904313U, 1038697459U, 1038489227U, 1038281971U, + 1038076063U, 1037869297U, 1037660693U, 1037454337U, 1037245081U, + 1037036801U, 1036830203U, 1036622537U, 1036418689U, 1036209221U, + 1036001821U, 1035793637U, 1035585337U, 1035377579U, 1035169859U, + 1034963477U, 1034755889U, 1034547919U, 1034339519U, 1034133439U, + 1033926133U, 1033718393U, 1033508219U, 1033301741U, 1033093891U, + 1032883727U, 1032675671U, 1032468491U, 1032261277U, 1032053389U, + 1031846441U, 1031638939U, 1031432029U, 1031222191U, 1031015443U, + 1030807237U, 1030602227U, 1030394653U, 1030187299U, 1029978863U, + 1029770507U, 1029562477U, 1029356557U, 1029149479U, 1028943049U, + 1028736311U, 1028526439U, 1028322089U, 1028114587U, 1027905079U, + 1027698571U, 1027491097U, 1027281383U, 1027072499U, 1026864593U, + 1026655111U, 1026449509U, 1026242017U, 1026034411U, 1025827493U, + 1025619773U, 1025412833U, 1025205917U, 1024998553U, 1024790993U, + 1024585409U, 1024377589U, 1024170479U, 1023963079U, 1023754891U, + 1023546973U, 1023340459U, 1023130879U, 1022924689U, 1022717417U, + 1022509559U, 1022303539U, 1022093477U, 1021885679U, 1021678703U, + 1021470403U, 1021262609U, 1021056017U, 1020847343U, 1020639803U, + 1020432683U, 1020225047U, 1020020171U, 1019812693U, 1019606831U, + 1019398117U, 1019190233U, 1018982821U, 1018775161U, 1018567057U, + 1018358507U, 1018151209U, 1017944381U, 1017736241U, 1017530897U, + 1017324137U, 1017116063U, 1016908021U, 1016700959U, 1016493871U, + 1016286463U, 1016078939U, 1015870729U, 1015663459U, 1015456751U, + 1015249799U, 1015043849U, 1014837041U, 1014630109U, 1014424841U, + 1014216271U, 1014010013U, 1013804111U, 1013594851U, 1013387113U, + 1013179397U, 1012969481U, 1012763077U, 1012555567U, 1012347803U, + 1012140301U, 1011933803U, 1011728813U, 1011522041U, 1011312689U, + 1011105943U, 1010899103U, 1010691037U, 1010484037U, 1010277799U, + 1010068273U, 1009863587U, 1009654741U, 1009449401U, 1009242103U, + 1009035059U, 1008826657U, 1008617111U, 1008409531U, 1008202501U, + 1007995843U, 1007786251U, 1007579669U, 1007371847U, 1007167529U, + 1006961783U, 1006755119U, 1006546817U, 1006337861U, 1006130189U, + 1005921529U, 1005714239U, 1005508093U, 1005301811U, 1005096139U, + 1004888011U, 1004681233U, 1004475079U, 1004267977U, 1004061257U, + 1003852589U, 1003647949U, 1003439069U, 1003232161U, 1003024067U, + 1002817859U, 1002610171U, 1002403361U, 1002194651U, 1001986877U, + 1001778803U, 1001571667U, 1001364493U, 1001156677U, 1000951957U, + 1000744669U, 1000537129U, 1000327297U, 1000119983U, 999912523U, + 999703801U, 999493673U, 999286423U, 999078749U, 998871407U, 998664533U, + 998458471U, 998253203U, 998046109U, 997839767U, 997633313U, 997426693U, + 997218899U, 997011133U, 996803813U, 996597577U, 996390223U, 996183359U, + 995977547U, 995770397U, 995562409U, 995354803U, 995146829U, 994941529U, + 994735051U, 994527539U, 994320137U, 994113697U, 993907393U, 993698323U, + 993491119U, 993282299U, 993076549U, 992870051U, 992663029U, 992455333U, + 992248849U, 992042297U, 991833253U, 991624423U, 991417409U, 991211311U, + 991005881U, 990798979U, 990592243U, 990385157U, 990176959U, 989971237U, + 989762567U, 989556467U, 989348963U, 989142277U, 988934563U, 988729121U, + 988519901U, 988313663U, 988104911U, 987897461U, 987692201U, 987484747U, + 987276473U, 987069637U, 986861357U, 986656057U, 986450291U, 986242583U, + 986034559U, 985828897U, 985620491U, 985413613U, 985208027U, 984999641U, + 984793639U, 984586049U, 984379723U, 984171319U, 983966077U, 983761687U, + 983554151U, 983347199U, 983139727U, 982933051U, 982728209U, 982520449U, + 982314679U, 982108307U, 981899161U, 981692263U, 981484789U, 981277889U, + 981072341U, 980865359U, 980657081U, 980449601U, 980242871U, 980035361U, + 979828741U, 979620721U, 979413271U, 979206149U, 979000333U, 978793337U, + 978582823U, 978378091U, 978170003U, 977962343U, 977755951U, 977548213U, + 977341201U, 977134861U, 976928089U, 976721873U, 976515613U, 976308323U, + 976101821U, 975892903U, 975685771U, 975477911U, 975270103U, 975063059U, + 974856133U, 974650109U, 974441773U, 974234951U, 974027363U, 973819969U, + 973612897U, 973407217U, 973200797U, 972991693U, 972783767U, 972575189U, + 972370271U, 972161327U, 971955211U, 971747593U, 971541997U, 971334241U, + 971126231U, 970917953U, 970712653U, 970504793U, 970298893U, 970093193U, + 969885979U, 969678383U, 969471989U, 969264253U, 969059699U, 968852399U, + 968645647U, 968438519U, 968231983U, 968024059U, 967817281U, 967613329U, + 967406161U, 967197743U, 966990467U, 966783197U, 966577459U, 966369473U, + 966164629U, 965956177U, 965746939U, 965540179U, 965333641U, 965127589U, + 964920427U, 964712663U, 964505779U, 964297351U, 964090601U, 963884557U, + 963679721U, 963472667U, 963264233U, 963057677U, 962851469U, 962644237U, + 962439397U, 962233927U, 962026067U, 961818331U, 961609657U, 961402753U, + 961196113U, 960989921U, 960783503U, 960575053U, 960369671U, 960164357U, + 959958569U, 959751467U, 959545339U, 959337787U, 959132063U, 958927643U, + 958719757U, 958513207U, 958308079U, 958099903U, 957892121U, 957686003U, + 957479813U, 957274463U, 957070073U, 956863231U, 956656499U, 956450219U, + 956243017U, 956035967U, 955827647U, 955619213U, 955411801U, 955206139U, + 955000157U, 954793003U, 954587419U, 954379667U, 954173333U, 953967467U, + 953761241U, 953554561U, 953347751U, 953141549U, 952936403U, 952729321U, + 952522433U, 952313891U, 952108571U, 951902069U, 951695267U, 951487843U, + 951281183U, 951072641U, 950867891U, 950659939U, 950453393U, 950245817U, + 950038891U, 949831711U, 949624163U, 949418621U, 949210631U, 949004237U, + 948797947U, 948590129U, 948383503U, 948176329U, 947969749U, 947762281U, + 947557529U, 947350549U, 947146309U, 946941377U, 946733339U, 946525397U, + 946319123U, 946112749U, 945906653U, 945699767U, 945493957U, 945286103U, + 945079393U, 944872997U, 944666137U, 944457727U, 944251129U, 944045093U, + 943841623U, 943634413U, 943428457U, 943221553U, 943014223U, 942807059U, + 942599201U, 942394279U, 942186577U, 941980649U, 941770757U, 941565017U, + 941358941U, 941153023U, 940944761U, 940739473U, 940534457U, 940328141U, + 940121129U, 939914237U, 939707311U, 939498481U, 939290711U, 939083969U, + 938877299U, 938670497U, 938463313U, 938256743U, 938050571U, 937843117U, + 937635403U, 937430023U, 937224481U, 937017241U, 936808751U, 936602551U, + 936393247U, 936187487U, 935980187U, 935774839U, 935568223U, 935362513U, + 935157149U, 934950433U, 934744141U, 934538333U, 934332799U, 934125721U, + 933915907U, 933712601U, 933505961U, 933298987U, 933094187U, 932887321U, + 932682197U, 932474657U, 932268949U, 932062069U, 931853539U, 931648031U, + 931441501U, 931235729U, 931028831U, 930822023U, 930615799U, 930410359U, + 930203363U, 929997377U, 929791073U, 929583461U, 929378647U, 929171809U, + 928961563U, 928753213U, 928546337U, 928340111U, 928133047U, 927927431U, + 927719873U, 927511327U, 927303313U, 927097819U, 926891057U, 926683861U, + 926476429U, 926272069U, 926065423U, 925858279U, 925653983U, 925447087U, + 925239961U, 925034359U, 924827639U, 924620899U, 924415159U, 924208093U, + 924001801U, 923795833U, 923589143U, 923381033U, 923174653U, 922968353U, + 922762307U, 922554167U, 922346597U, 922140283U, 921933101U, 921726833U, + 921521323U, 921314491U, 921104917U, 920900389U, 920696473U, 920488883U, + 920284241U, 920077003U, 919871549U, 919665931U, 919461089U, 919253327U, + 919047611U, 918843181U, 918636781U, 918431209U, 918225853U, 918018929U, + 917810801U, 917602223U, 917395903U, 917188477U, 916982489U, 916774951U, + 916568707U, 916361893U, 916156721U, 915951917U, 915745531U, 915540091U, + 915333547U, 915126503U, 914921417U, 914715511U, 914509529U, 914303749U, + 914097449U, 913892719U, 913684151U, 913479859U, 913271237U, 913061893U, + 912856787U, 912650659U, 912447581U, 912239071U, 912033929U, 911828861U, + 911623931U, 911416811U, 911211313U, 911004803U, 910799521U, 910594129U, + 910388137U, 910180189U, 909975103U, 909769517U, 909564301U, 909358363U, + 909154039U, 908950027U, 908742859U, 908536289U, 908330999U, 908122427U, + 907915453U, 907709161U, 907504669U, 907298807U, 907092811U, 906888161U, + 906681863U, 906477373U, 906270719U, 906063619U, 905857787U, 905652047U, + 905446649U, 905241457U, 905037937U, 904830643U, 904624129U, 904412191U, + 904207417U, 904001689U, 903795047U, 903589319U, 903382463U, 903178417U, + 902973857U, 902767081U, 902558269U, 902351161U, 902142887U, 901935031U, + 901729561U, 901524121U, 901318051U, 901111439U, 900906637U, 900700831U, + 900494867U, 900290857U, 900084401U, 899879263U, 899671099U, 899463869U, + 899258387U, 899051437U, 898845781U, 898638131U, 898431239U, 898226999U, + 898020311U, 897812969U, 897607853U, 897401333U, 897194827U, 896988797U, + 896782561U, 896575313U, 896370289U, 896163013U, 895955897U, 895751147U, + 895544131U, 895337041U, 895131739U, 894924157U, 894717371U, 894511207U, + 894304603U, 894098801U, 893892721U, 893686333U, 893479253U, 893273831U, + 893069227U, 892863337U, 892659133U, 892455203U, 892249121U, 892042433U, + 891836821U, 891629833U, 891421211U, 891214297U, 891007393U, 890801147U, + 890593727U, 890387999U, 890182673U, 889977527U, 889771829U, 889565387U, + 889357043U, 889151611U, 888944711U, 888738751U, 888533159U, 888326333U, + 888119311U, 887913683U, 887710319U, 887504369U, 887298869U, 887092457U, + 886885721U, 886678853U, 886474403U, 886268503U, 886062503U, 885857129U, + 885650761U, 885443579U, 885236993U, 885030703U, 884822867U, 884615929U, + 884409923U, 884205199U, 883998877U, 883793107U, 883588081U, 883380077U, + 883172489U, 882967091U, 882760639U, 882556957U, 882351131U, 882144853U, + 881939497U, 881732437U, 881527169U, 881321641U, 881116981U, 880910321U, + 880702661U, 880495237U, 880288337U, 880082239U, 879875501U, 879669793U, + 879464407U, 879258439U, 879051493U, 878846819U, 878642081U, 878436607U, + 878230709U, 878025917U, 877819699U, 877613479U, 877406449U, 877200449U, + 876993101U, 876786593U, 876580267U, 876375277U, 876167623U, 875960333U, + 875755271U, 875547059U, 875341081U, 875133761U, 874927159U, 874724077U, + 874517923U, 874312423U, 874106309U, 873900127U, 873692717U, 873487577U, + 873282323U, 873076363U, 872872051U, 872667931U, 872461297U, 872252947U, + 872048687U, 871843979U, 871637411U, 871431779U, 871224707U, 871016617U, + 870810277U, 870604591U, 870398107U, 870193447U, 869988349U, 869782429U, + 869579747U, 869372099U, 869166061U, 868958539U, 868754771U, 868548341U, + 868343237U, 868135109U, 867930487U, 867723991U, 867518711U, 867314957U, + 867109753U, 866904347U, 866699791U, 866493643U, 866287339U, 866080493U, + 865873159U, 865665811U, 865460467U, 865256173U, 865051073U, 864844751U, + 864638191U, 864434687U, 864229549U, 864024071U, 863818961U, 863613349U, + 863408839U, 863200651U, 862995349U, 862789141U, 862584491U, 862376869U, + 862173199U, 861967571U, 861759439U, 861555043U, 861350729U, 861143057U, + 860938087U, 860732359U, 860524417U, 860319727U, 860112137U, 859906457U, + 859700689U, 859493447U, 859285943U, 859078879U, 858872177U, 858667783U, + 858462079U, 858257021U, 858050153U, 857845171U, 857641481U, 857434343U, + 857229661U, 857021821U, 856815683U, 856610141U, 856403957U, 856197857U, + 855991243U, 855787067U, 855580549U, 855376927U, 855170389U, 854963783U, + 854759743U, 854554699U, 854348233U, 854142089U, 853936907U, 853731059U, + 853526381U, 853322969U, 853117247U, 852910259U, 852705479U, 852499171U, + 852292559U, 852088277U, 851882099U, 851674477U, 851469019U, 851264669U, + 851057611U, 850851587U, 850646939U, 850441219U, 850233557U, 850027799U, + 849822679U, 849618937U, 849412657U, 849206053U, 849000613U, 848795179U, + 848593357U, 848389111U, 848183599U, 847977167U, 847770809U, 847565239U, + 847359661U, 847153661U, 846946957U, 846740357U, 846533267U, 846328151U, + 846122219U, 845917427U, 845711719U, 845507317U, 845300191U, 845093831U, + 844888931U, 844684639U, 844476407U, 844270619U, 844064857U, 843857627U, + 843651791U, 843446467U, 843243067U, 843038501U, 842832899U, 842629639U, + 842424053U, 842217149U, 842013313U, 841808101U, 841604131U, 841399711U, + 841190411U, 840984299U, 840779671U, 840573443U, 840368603U, 840162481U, + 839958013U, 839751259U, 839547497U, 839344031U, 839137381U, 838930861U, + 838723777U, 838515877U, 838312229U, 838108081U, 837905749U, 837700639U, + 837495367U, 837289603U, 837084181U, 836877871U, 836671211U, 836468057U, + 836260973U, 836056369U, 835849453U, 835644737U, 835437937U, 835233631U, + 835027631U, 834821531U, 834617561U, 834413053U, 834207961U, 834001559U, + 833795381U, 833590399U, 833388103U, 833180779U, 832975837U, 832771883U, + 832566463U, 832361093U, 832154209U, 831950087U, 831745181U, 831538217U, + 831331097U, 831128377U, 830922097U, 830714711U, 830510453U, 830306963U, + 830101141U, 829895009U, 829689409U, 829481797U, 829277191U, 829072877U, + 828868163U, 828661567U, 828457241U, 828252463U, 828047761U, 827842021U, + 827636519U, 827429737U, 827225387U, 827019359U, 826814369U, 826608259U, + 826403551U, 826198921U, 825992749U, 825787181U, 825582193U, 825377621U, + 825173177U, 824968519U, 824762513U, 824555269U, 824349683U, 824142367U, + 823937089U, 823731899U, 823527623U, 823323491U, 823117289U, 822911773U, + 822704539U, 822498949U, 822298387U, 822092333U, 821884897U, 821679041U, + 821473817U, 821267743U, 821060567U, 820857749U, 820652309U, 820449247U, + 820243231U, 820038239U, 819832337U, 819626957U, 819422881U, 819216481U, + 819009029U, 818804929U, 818600191U, 818395423U, 818188193U, 817983277U, + 817775953U, 817571851U, 817365001U, 817161731U, 816957101U, 816754249U, + 816547183U, 816342731U, 816137629U, 815932811U, 815728063U, 815525041U, + 815320771U, 815114593U, 814909063U, 814704377U, 814499137U, 814294979U, + 814090049U, 813884047U, 813678431U, 813473777U, 813266687U, 813062197U, + 812858303U, 812653463U, 812444767U, 812240867U, 812035387U, 811829387U, + 811623677U, 811416707U, 811210409U, 811006307U, 810802211U, 810597041U, + 810391237U, 810187129U, 809982451U, 809777047U, 809570357U, 809367527U, + 809162383U, 808957727U, 808753609U, 808548869U, 808343827U, 808138619U, + 807933043U, 807728011U, 807520933U, 807315097U, 807110879U, 806906183U, + 806700733U, 806496791U, 806292649U, 806087551U, 805883863U, 805677811U, + 805473197U, 805269511U, 805063621U, 804860167U, 804656609U, 804452377U, + 804248353U, 804043717U, 803837729U, 803632777U, 803427617U, 803222543U, + 803016983U, 802811783U, 802605607U, 802398869U, 802193299U, 801988721U, + 801783091U, 801576833U, 801372301U, 801170593U, 800964947U, 800759837U, + 800555507U, 800349989U, 800145637U, 799941431U, 799735591U, 799530211U, + 799321723U, 799115183U, 798908287U, 798702907U, 798498577U, 798294529U, + 798091429U, 797886301U, 797683489U, 797478323U, 797274593U, 797070173U, + 796866731U, 796663463U, 796458079U, 796253543U, 796047509U, 795843017U, + 795637589U, 795433099U, 795228689U, 795024343U, 794818757U, 794611771U, + 794405483U, 794201981U, 793996361U, 793791871U, 793589521U, 793383473U, + 793175657U, 792971173U, 792767303U, 792562187U, 792356891U, 792152663U, + 791946361U, 791741987U, 791537057U, 791331511U, 791127121U, 790921451U, + 790715449U, 790512449U, 790309699U, 790103269U, 789898783U, 789696023U, + 789491359U, 789286541U, 789083311U, 788879213U, 788676593U, 788471473U, + 788266363U, 788060909U, 787855697U, 787649867U, 787445047U, 787238801U, + 787033469U, 786827917U, 786623683U, 786418057U, 786213613U, 786009541U, + 785805851U, 785602429U, 785397241U, 785192389U, 784987867U, 784784137U, + 784580513U, 784374709U, 784168753U, 783964201U, 783759491U, 783556097U, + 783350957U, 783146677U, 782942621U, 782737691U, 782533847U, 782329189U, + 782124271U, 781920047U, 781716347U, 781508461U, 781306091U, 781102481U, + 780898067U, 780693167U, 780489373U, 780281669U, 780078977U, 779874761U, + 779670799U, 779465539U, 779259721U, 779055377U, 778850389U, 778646443U, + 778439353U, 778234753U, 778029961U, 777825071U, 777620797U, 777415897U, + 777212977U, 777008467U, 776805607U, 776599469U, 776394529U, 776188249U, + 775983587U, 775778981U, 775571197U, 775363819U, 775160839U, 774958963U, + 774755101U, 774549131U, 774344911U, 774139987U, 773935823U, 773731103U, + 773525183U, 773320489U, 773114789U, 772908407U, 772703273U, 772499641U, + 772296299U, 772091959U, 771888739U, 771682333U, 771478817U, 771274909U, + 771069413U, 770866417U, 770659819U, 770457361U, 770251723U, 770047417U, + 769842737U, 769639153U, 769435741U, 769230353U, 769026721U, 768821993U, + 768617809U, 768415003U, 768209993U, 768005369U, 767801081U, 767596649U, + 767392177U, 767188109U, 766984861U, 766780723U, 766577017U, 766370587U, + 766165427U, 765960827U, 765755923U, 765551887U, 765346807U, 765140107U, + 764934101U, 764729831U, 764524559U, 764318081U, 764113409U, 763908421U, + 763702871U, 763496977U, 763292863U, 763085441U, 762881213U, 762677887U, + 762472883U, 762269491U, 762066233U, 761861773U, 761656757U, 761454761U, + 761250397U, 761045281U, 760841267U, 760636241U, 760431571U, 760227421U, + 760022563U, 759818119U, 759613373U, 759409121U, 759205961U, 759002147U, + 758797409U, 758590351U, 758386777U, 758180999U, 757974431U, 757770557U, + 757563913U, 757360343U, 757155391U, 756951557U, 756745879U, 756541993U, + 756335977U, 756132043U, 755928577U, 755725219U, 755522717U, 755318411U, + 755117449U, 754911943U, 754708613U, 754505491U, 754301363U, 754096429U, + 753891353U, 753686273U, 753478769U, 753274433U, 753071041U, 752863843U, + 752659769U, 752454491U, 752252723U, 752047913U, 751843847U, 751641613U, + 751436113U, 751231693U, 751027219U, 750820591U, 750617599U, 750413071U, + 750209107U, 750002681U, 749799353U, 749596063U, 749390321U, 749187239U, + 748983497U, 748777097U, 748570727U, 748365781U, 748161493U, 747956771U, + 747753049U, 747549137U, 747345839U, 747141341U, 746936653U, 746730653U, + 746525287U, 746319589U, 746115709U, 745910587U, 745706963U, 745500979U, + 745297621U, 745091561U, 744887953U, 744681803U, 744478247U, 744274087U, + 744070963U, 743866531U, 743660123U, 743455499U, 743252057U, 743046131U, + 742841441U, 742636201U, 742430959U, 742227581U, 742023407U, 741819343U, + 741614831U, 741412043U, 741210733U, 741006107U, 740802157U, 740599147U, + 740395081U, 740190901U, 739986479U, 739783483U, 739579301U, 739376173U, + 739172509U, 738967561U, 738763513U, 738560629U, 738354811U, 738150871U, + 737948891U, 737742631U, 737539013U, 737333279U, 737130917U, 736926341U, + 736721627U, 736518637U, 736313399U, 736107901U, 735905449U, 735701039U, + 735498311U, 735292559U, 735087839U, 734883719U, 734680031U, 734475019U, + 734270261U, 734066527U, 733863617U, 733658491U, 733451969U, 733248409U, + 733045849U, 732842687U, 732637471U, 732431977U, 732227963U, 732024677U, + 731820107U, 731616659U, 731410013U, 731206789U, 731003699U, 730800157U, + 730597859U, 730392911U, 730186241U, 729983159U, 729778739U, 729572989U, + 729367999U, 729164873U, 728958179U, 728752537U, 728547713U, 728343281U, + 728139547U, 727934741U, 727731241U, 727527331U, 727325023U, 727122239U, + 726918719U, 726714731U, 726508303U, 726304021U, 726100841U, 725896487U, + 725691401U, 725488607U, 725283917U, 725079499U, 724872257U, 724670717U, + 724465921U, 724262933U, 724059107U, 723855389U, 723651367U, 723447541U, + 723243071U, 723040919U, 722835679U, 722632091U, 722430077U, 722225747U, + 722022241U, 721818211U, 721614809U, 721411309U, 721206137U, 721001899U, + 720798943U, 720594737U, 720394001U, 720189739U, 719985113U, 719779663U, + 719574659U, 719370763U, 719168381U, 718965557U, 718759667U, 718557457U, + 718352377U, 718147487U, 717944737U, 717741457U, 717537397U, 717333257U, + 717129419U, 716926489U, 716723647U, 716518147U, 716314759U, 716110303U, + 715906249U, 715701733U, 715496503U, 715293221U, 715088713U, 714884113U, + 714679831U, 714473567U, 714269599U, 714065827U, 713862659U, 713657779U, + 713453441U, 713248951U, 713045633U, 712842859U, 712636681U, 712433479U, + 712230031U, 712028087U, 711824431U, 711620251U, 711416557U, 711212743U, + 711009647U, 710806249U, 710602241U, 710397929U, 710193521U, 709987973U, + 709784423U, 709579397U, 709375097U, 709173313U, 708971059U, 708766621U, + 708560641U, 708357941U, 708154789U, 707951423U, 707747771U, 707544449U, + 707340901U, 707136037U, 706933907U, 706729477U, 706526057U, 706322767U, + 706119229U, 705915263U, 705708581U, 705507211U, 705303433U, 705098729U, + 704896967U, 704689123U, 704485543U, 704283677U, 704081153U, 703877453U, + 703673827U, 703469479U, 703265593U, 703061603U, 702857261U, 702652763U, + 702450323U, 702246911U, 702042587U, 701839483U, 701635811U, 701431931U, + 701230391U, 701026709U, 700824233U, 700619299U, 700414969U, 700211597U, + 700008041U, 699803639U, 699601703U, 699396107U, 699192971U, 698990321U, + 698784601U, 698583167U, 698379893U, 698174573U, 697969771U, 697766647U, + 697562161U, 697358087U, 697153277U, 696948883U, 696745613U, 696541897U, + 696337199U, 696132923U, 695930063U, 695727287U, 695524421U, 695321987U, + 695118793U, 694915033U, 694713121U, 694510799U, 694308409U, 694103749U, + 693902189U, 693697861U, 693495707U, 693290693U, 693086063U, 692880593U, + 692676043U, 692471839U, 692267629U, 692066027U, 691860787U, 691654427U, + 691452701U, 691248563U, 691046197U, 690843497U, 690640073U, 690436451U, + 690233857U, 690031691U, 689827861U, 689626391U, 689421461U, 689218693U, + 689016061U, 688813313U, 688608259U, 688404593U, 688201453U, 688000597U, + 687794941U, 687591491U, 687387941U, 687185729U, 686981179U, 686778749U, + 686575619U, 686372573U, 686170627U, 685965883U, 685763807U, 685561589U, + 685358743U, 685152973U, 684952267U, 684749539U, 684546301U, 684343783U, + 684139223U, 683937043U, 683733839U, 683530657U, 683328223U, 683124397U, + 682920827U, 682714943U, 682511183U, 682309351U, 682103599U, 681899051U, + 681696179U, 681493469U, 681289709U, 681085721U, 680882903U, 680679397U, + 680471927U, 680270299U, 680065777U, 679861867U, 679660061U, 679456607U, + 679253357U, 679050059U, 678847717U, 678642989U, 678440069U, 678236347U, + 678035641U, 677830873U, 677628803U, 677424799U, 677220611U, 677016947U, + 676812611U, 676609151U, 676406209U, 676201349U, 675997891U, 675795247U, + 675590893U, 675387701U, 675183583U, 674978831U, 674776187U, 674572439U, + 674370167U, 674165113U, 673961681U, 673757599U, 673553927U, 673350653U, + 673147133U, 672945331U, 672743177U, 672540733U, 672338573U, 672133181U, + 671930689U, 671727011U, 671523233U, 671318261U, 671115199U, 670911421U, + 670709293U, 670506917U, 670302641U, 670101259U, 669897967U, 669694541U, + 669491029U, 669287683U, 669083971U, 668881069U, 668676179U, 668472397U, + 668270507U, 668068201U, 667863941U, 667658281U, 667455779U, 667252673U, + 667049989U, 666846907U, 666644311U, 666440711U, 666237587U, 666033439U, + 665831629U, 665628493U, 665425433U, 665220097U, 665019863U, 664815269U, + 664610027U, 664406489U, 664204199U, 663999913U, 663797773U, 663594973U, + 663391571U, 663189217U, 662985991U, 662781139U, 662578771U, 662376301U, + 662173163U, 661970923U, 661766587U, 661564117U, 661360867U, 661158109U, + 660956579U, 660753323U, 660550507U, 660347899U, 660143741U, 659941621U, + 659737963U, 659535911U, 659332409U, 659131883U, 658928773U, 658726249U, + 658522097U, 658318981U, 658115791U, 657911473U, 657709483U, 657506237U, + 657303599U, 657101573U, 656898113U, 656695649U, 656493203U, 656289511U, + 656086637U, 655885333U, 655683869U, 655477967U, 655274233U, 655071191U, + 654867817U, 654663497U, 654460787U, 654256483U, 654053731U, 653852063U, + 653650927U, 653448149U, 653244967U, 653042101U, 652837447U, 652635847U, + 652434457U, 652230121U, 652026413U, 651823261U, 651619429U, 651414263U, + 651213137U, 651010247U, 650806159U, 650604349U, 650401841U, 650199787U, + 649998353U, 649795441U, 649591843U, 649389071U, 649186823U, 648983471U, + 648779801U, 648576407U, 648375163U, 648172121U, 647967751U, 647766323U, + 647563951U, 647360759U, 647158151U, 646956643U, 646751759U, 646549147U, + 646347641U, 646142711U, 645940591U, 645738493U, 645535757U, 645336379U, + 645133271U, 644930747U, 644725849U, 644524271U, 644320097U, 644116379U, + 643912121U, 643709431U, 643507399U, 643302419U, 643098277U, 642895997U, + 642692101U, 642490577U, 642287293U, 642084581U, 641879369U, 641675651U, + 641473507U, 641272769U, 641068943U, 640865791U, 640663691U, 640461149U, + 640258441U, 640056797U, 639853933U, 639651763U, 639448993U, 639245209U, + 639043667U, 638841017U, 638636197U, 638432797U, 638230627U, 638028499U, + 637825693U, 637622473U, 637419509U, 637218331U, 637014737U, 636813649U, + 636611513U, 636407791U, 636204119U, 636002737U, 635801591U, 635599907U, + 635397629U, 635193677U, 634989863U, 634789277U, 634586243U, 634382291U, + 634179061U, 633977947U, 633775931U, 633574021U, 633367927U, 633164879U, + 632962807U, 632759377U, 632555153U, 632351501U, 632150209U, 631946437U, + 631743881U, 631540807U, 631339997U, 631139219U, 630934589U, 630731029U, + 630527089U, 630324089U, 630122813U, 629920561U, 629717899U, 629513603U, + 629311447U, 629108819U, 628907117U, 628703701U, 628502051U, 628298389U, + 628095469U, 627893857U, 627691369U, 627491489U, 627289417U, 627087541U, + 626884411U, 626682481U, 626481029U, 626279263U, 626075917U, 625873021U, + 625669463U, 625467991U, 625264193U, 625060103U, 624858583U, 624656741U, + 624453941U, 624251627U, 624049919U, 623848559U, 623644843U, 623442283U, + 623240573U, 623038027U, 622835881U, 622632193U, 622429267U, 622225393U, + 622024201U, 621821443U, 621618353U, 621416293U, 621213811U, 621010913U, + 620807219U, 620605273U, 620404303U, 620202071U, 619998289U, 619795069U, + 619594111U, 619392973U, 619191751U, 618987839U, 618784261U, 618581881U, + 618380407U, 618179491U, 617976509U, 617775247U, 617572051U, 617364289U, + 617162387U, 616957969U, 616754869U, 616551841U, 616350121U, 616148317U, + 615943327U, 615740759U, 615539033U, 615337127U, 615132989U, 614932831U, + 614733143U, 614529679U, 614325851U, 614124109U, 613920361U, 613718159U, + 613514249U, 613312057U, 613110397U, 612910351U, 612707237U, 612504667U, + 612304261U, 612103909U, 611900753U, 611698123U, 611496157U, 611294227U, + 611090479U, 610887731U, 610683587U, 610480919U, 610280401U, 610078039U, + 609876131U, 609674269U, 609471799U, 609269761U, 609066739U, 608862853U, + 608660761U, 608456423U, 608255107U, 608053217U, 607852319U, 607649767U, + 607446799U, 607245157U, 607042897U, 606840127U, 606637931U, 606436657U, + 606232813U, 606032149U, 605830289U, 605626213U, 605422177U, 605219947U, + 605016959U, 604813397U, 604610459U, 604408589U, 604206847U, 604006127U, + 603805283U, 603604933U, 603403301U, 603202087U, 603001453U, 602798479U, + 602596451U, 602394857U, 602192561U, 601991009U, 601786813U, 601586017U, + 601384957U, 601182587U, 600980227U, 600778547U, 600576233U, 600374387U, + 600172591U, 599971679U, 599769923U, 599566883U, 599363221U, 599161111U, + 598958683U, 598756549U, 598555813U, 598352719U, 598150877U, 597947153U, + 597745297U, 597541999U, 597337567U, 597136207U, 596934421U, 596732161U, + 596529809U, 596328263U, 596126887U, 595926047U, 595726231U, 595525477U, + 595323367U, 595123103U, 594920329U, 594717373U, 594516499U, 594314507U, + 594112087U, 593912741U, 593711309U, 593508803U, 593308451U, 593103053U, + 592900741U, 592698257U, 592494193U, 592293173U, 592091407U, 591888067U, + 591687923U, 591486463U, 591284051U, 591082729U, 590883119U, 590681459U, + 590480369U, 590278001U, 590076283U, 589874573U, 589674193U, 589472339U, + 589270849U, 589070381U, 588870313U, 588669443U, 588464057U, 588263561U, + 588060061U, 587857031U, 587654689U, 587452897U, 587251337U, 587049017U, + 586846721U, 586644491U, 586443799U, 586242571U, 586040383U, 585835819U, + 585633127U, 585433627U, 585230879U, 585029329U, 584826139U, 584624393U, + 584422913U, 584219341U, 584015989U, 583814299U, 583611703U, 583411267U, + 583210997U, 583007807U, 582807571U, 582605579U, 582405001U, 582205361U, + 582002873U, 581798431U, 581597867U, 581397871U, 581194717U, 580991603U, + 580790069U, 580589203U, 580387013U, 580186129U, 579982621U, 579781781U, + 579578579U, 579376393U, 579178037U, 578976389U, 578773919U, 578570711U, + 578369717U, 578169673U, 577965979U, 577763447U, 577562731U, 577360717U, + 577158581U, 576956839U, 576754333U, 576554747U, 576354287U, 576152683U, + 575949761U, 575748139U, 575545297U, 575344691U, 575141939U, 574940273U, + 574739071U, 574537841U, 574335733U, 574132697U, 573930839U, 573729197U, + 573527359U, 573326459U, 573124847U, 572923643U, 572722207U, 572520763U, + 572320277U, 572119133U, 571917083U, 571714459U, 571514039U, 571312447U, + 571109333U, 570908267U, 570706163U, 570505211U, 570302011U, 570100901U, + 569899741U, 569695739U, 569494903U, 569292637U, 569090791U, 568890131U, + 568688333U, 568486201U, 568285241U, 568083853U, 567883439U, 567682277U, + 567480181U, 567278477U, 567075389U, 566876873U, 566672047U, 566471351U, + 566269831U, 566067713U, 565866193U, 565665403U, 565463131U, 565261157U, + 565060669U, 564859157U, 564657833U, 564456637U, 564253399U, 564050923U, + 563849423U, 563648951U, 563446757U, 563245951U, 563043527U, 562844081U, + 562640021U, 562439363U, 562237279U, 562037263U, 561836309U, 561636739U, + 561436591U, 561233341U, 561031321U, 560827517U, 560628337U, 560425741U, + 560224517U, 560023267U, 559821347U, 559619603U, 559418737U, 559216529U, + 559013027U, 558812473U, 558611803U, 558408817U, 558207941U, 558007081U, + 557807857U, 557605397U, 557403169U, 557203447U, 557001349U, 556799281U, + 556595849U, 556396177U, 556194521U, 555994253U, 555791333U, 555590479U, + 555389213U, 555186431U, 554986511U, 554785073U, 554584267U, 554380919U, + 554178277U, 553976713U, 553776191U, 553572707U, 553372213U, 553172117U, + 552972401U, 552771497U, 552570311U, 552369217U, 552167767U, 551967211U, + 551766811U, 551565811U, 551364811U, 551162357U, 550961809U, 550761137U, + 550560139U, 550358761U, 550159567U, 549958901U, 549757049U, 549557549U, + 549356981U, 549155773U, 548954101U, 548752109U, 548551309U, 548349407U, + 548149279U, 547949123U, 547747367U, 547545563U, 547344871U, 547145353U, + 546945383U, 546744547U, 546542723U, 546340393U, 546138457U, 545937809U, + 545735521U, 545535997U, 545334311U, 545133191U, 544932499U, 544732439U, + 544530967U, 544329011U, 544127197U, 543926419U, 543724817U, 543523769U, + 543322561U, 543119747U, 542918149U, 542717267U, 542513899U, 542313859U, + 542112257U, 541910729U, 541709111U, 541507361U, 541304821U, 541103399U, + 540902563U, 540701129U, 540501653U, 540301187U, 540098873U, 539897623U, + 539694797U, 539494807U, 539294407U, 539095981U, 538892941U, 538692157U, + 538491649U, 538288771U, 538087817U, 537887657U, 537687739U, 537487169U, + 537284981U, 537083843U, 536882651U, 536681611U, 536479873U, 536280743U, + 536080177U, 535880399U, 535676699U, 535475179U, 535275227U, 535076489U, + 534877139U, 534675809U, 534475439U, 534273799U, 534072523U, 533871847U, + 533669711U, 533467969U, 533268401U, 533066321U, 532865881U, 532665751U, + 532465837U, 532263973U, 532062943U, 531863203U, 531661121U, 531460661U, + 531258587U, 531058793U, 530857277U, 530654587U, 530453389U, 530251793U, + 530050559U, 529850803U, 529650467U, 529450759U, 529250581U, 529048207U, + 528848687U, 528646109U, 528445363U, 528244949U, 528043793U, 527843429U, + 527644543U, 527442943U, 527244271U, 527042909U, 526841269U, 526640363U, + 526441231U, 526241101U, 526040443U, 525839239U, 525638411U, 525434137U, + 525234989U, 525033917U, 524833663U, 524631677U, 524432423U, 524231369U, + 524029361U, 523831199U, 523626899U, 523425431U, 523225741U, 523026701U, + 522826373U, 522627043U, 522427067U, 522224917U, 522023401U, 521821427U, + 521621959U, 521422549U, 521221067U, 521019319U, 520817963U, 520616627U, + 520416683U, 520213721U, 520012981U, 519811693U, 519612167U, 519410641U, + 519212537U, 519010183U, 518809799U, 518610613U, 518408963U, 518208749U, + 518007229U, 517808209U, 517608347U, 517408183U, 517207921U, 517005949U, + 516805997U, 516604573U, 516406013U, 516207467U, 516008153U, 515806139U, + 515604629U, 515405351U, 515204141U, 515003767U, 514802657U, 514601641U, + 514400261U, 514198963U, 513997249U, 513796343U, 513594311U, 513394933U, + 513194443U, 512993147U, 512791793U, 512591657U, 512391179U, 512189567U, + 511989869U, 511791689U, 511592533U, 511390471U, 511189741U, 510988547U, + 510785537U, 510583921U, 510382417U, 510182483U, 509981909U, 509779393U, + 509577611U, 509376979U, 509178223U, 508978709U, 508776343U, 508576129U, + 508377131U, 508175669U, 507974827U, 507776117U, 507575839U, 507374239U, + 507172243U, 506971207U, 506771051U, 506569117U, 506371009U, 506169997U, + 505970363U, 505771171U, 505568621U, 505370287U, 505167449U, 504965723U, + 504765221U, 504565993U, 504363793U, 504162943U, 503962243U, 503761499U, + 503562671U, 503362183U, 503161073U, 502963723U, 502760147U, 502557053U, + 502358569U, 502157779U, 501955921U, 501757211U, 501555529U, 501353029U, + 501151003U, 500950243U, 500749423U, 500548927U, 500349547U, 500150419U, + 499949237U, 499748027U, 499548073U, 499348043U, 499148371U, 498946183U, + 498744937U, 498544243U, 498344221U, 498145331U, 497944339U, 497742803U, + 497542301U, 497342597U, 497142461U, 496944137U, 496743421U, 496542467U, + 496342559U, 496141033U, 495942431U, 495744017U, 495541757U, 495342109U, + 495144467U, 494944381U, 494744039U, 494544251U, 494343253U, 494142589U, + 493941887U, 493744421U, 493544963U, 493343107U, 493144049U, 492942053U, + 492741779U, 492543169U, 492340843U, 492142411U, 491941981U, 491741039U, + 491539963U, 491339879U, 491139391U, 490939979U, 490739591U, 490540991U, + 490338143U, 490138709U, 489939733U, 489741347U, 489539027U, 489340637U, + 489141589U, 488941511U, 488740841U, 488539937U, 488338727U, 488139371U, + 487937057U, 487738711U, 487538809U, 487339261U, 487140481U, 486937639U, + 486736531U, 486537329U, 486338273U, 486136883U, 485937509U, 485738203U, + 485538127U, 485337989U, 485140349U, 484937711U, 484737509U, 484536757U, + 484336837U, 484137497U, 483939971U, 483737039U, 483537449U, 483337639U, + 483138653U, 482938283U, 482739253U, 482538299U, 482338403U, 482138263U, + 481938917U, 481736617U, 481536409U, 481337513U, 481137857U, 480937759U, + 480739001U, 480537581U, 480336917U, 480136567U, 479938223U, 479737619U, + 479539097U, 479339183U, 479141059U, 478942067U, 478741559U, 478542703U, + 478340857U, 478142449U, 477944321U, 477743977U, 477546011U, 477347399U, + 477147521U, 476947259U, 476747641U, 476548901U, 476348827U, 476150273U, + 475948013U, 475750589U, 475551379U, 475352797U, 475150409U, 474949693U, + 474751171U, 474549793U, 474348517U, 474147491U, 473949131U, 473748619U, + 473548253U, 473348831U, 473147219U, 472948547U, 472747463U, 472547989U, + 472347287U, 472145659U, 471945917U, 471748649U, 471548069U, 471348961U, + 471149207U, 470950153U, 470748791U, 470549347U, 470351477U, 470150717U, + 469952341U, 469751767U, 469551091U, 469352539U, 469151213U, 468950203U, + 468751051U, 468552247U, 468353461U, 468152129U, 467952377U, 467754227U, + 467555227U, 467355353U, 467156101U, 466955911U, 466757003U, 466556239U, + 466357963U, 466158311U, 465959267U, 465760007U, 465561557U, 465360937U, + 465161383U, 464962279U, 464762321U, 464563501U, 464362757U, 464163571U, + 463962397U, 463764967U, 463564469U, 463364893U, 463166261U, 462966761U, + 462766189U, 462569413U, 462372247U, 462170981U, 461971409U, 461772973U, + 461573053U, 461372407U, 461172953U, 460973837U, 460773757U, 460575421U, + 460375787U, 460175531U, 459975463U, 459775529U, 459576269U, 459375529U, + 459176827U, 458978837U, 458778251U, 458579623U, 458378449U, 458179201U, + 457980247U, 457780087U, 457579873U, 457380149U, 457179883U, 456978043U, + 456778277U, 456580403U, 456382621U, 456183779U, 455983999U, 455784811U, + 455587133U, 455387473U, 455190709U, 454989583U, 454790839U, 454592141U, + 454393207U, 454192829U, 453991639U, 453792349U, 453594863U, 453395477U, + 453195317U, 452997271U, 452797781U, 452598371U, 452398861U, 452198111U, + 451999063U, 451798381U, 451599991U, 451401329U, 451203043U, 451003369U, + 450804311U, 450605033U, 450406111U, 450207323U, 450005779U, 449805127U, + 449607377U, 449408263U, 449210183U, 449009257U, 448811263U, 448610651U, + 448410961U, 448211779U, 448012727U, 447814069U, 447614969U, 447417629U, + 447219607U, 447018653U, 446819507U, 446619211U, 446420999U, 446222983U, + 446025029U, 445823501U, 445625413U, 445426213U, 445225961U, 445026437U, + 444825617U, 444626759U, 444429047U, 444229369U, 444030101U, 443829811U, + 443630137U, 443431517U, 443232901U, 443033827U, 442834741U, 442637519U, + 442437967U, 442240273U, 442041881U, 441842741U, 441643283U, 441444281U, + 441245989U, 441046421U, 440848217U, 440650913U, 440452801U, 440253907U, + 440054633U, 439853749U, 439654013U, 439457189U, 439257359U, 439056533U, + 438858703U, 438659831U, 438462467U, 438263159U, 438064609U, 437865427U, + 437666947U, 437466863U, 437268773U, 437068847U, 436868449U, 436670497U, + 436471037U, 436273589U, 436074449U, 435875689U, 435675841U, 435478531U, + 435278447U, 435078181U, 434878967U, 434679697U, 434481449U, 434283781U, + 434085941U, 433886129U, 433689709U, 433489633U, 433289327U, 433091431U, + 432890333U, 432691601U, 432492787U, 432294497U, 432094483U, 431894923U, + 431696873U, 431497559U, 431296277U, 431098417U, 430900109U, 430702603U, + 430503809U, 430302787U, 430105099U, 429906679U, 429707029U, 429509417U, + 429310421U, 429109423U, 428910857U, 428711483U, 428511703U, 428314927U, + 428117311U, 427918651U, 427719401U, 427521481U, 427322989U, 427123111U, + 426925133U, 426724349U, 426525871U, 426326893U, 426127813U, 425928799U, + 425728997U, 425533403U, 425334583U, 425135617U, 424936537U, 424737011U, + 424541581U, 424343551U, 424146511U, 423946121U, 423748387U, 423548303U, + 423351671U, 423152069U, 422954933U, 422755831U, 422557453U, 422359213U, + 422158339U, 421960291U, 421763827U, 421563733U, 421366151U, 421167689U, + 420969389U, 420769309U, 420572881U, 420375001U, 420176611U, 419976331U, + 419776127U, 419578361U, 419379509U, 419179603U, 418979641U, 418780897U, + 418582277U, 418383109U, 418183849U, 417986473U, 417785383U, 417587249U, + 417388949U, 417191617U, 416992963U, 416794331U, 416597381U, 416398579U, + 416200951U, 416001809U, 415803473U, 415603697U, 415405307U, 415207843U, + 415009589U, 414810257U, 414610699U, 414413353U, 414215677U, 414018053U, + 413818421U, 413621567U, 413423687U, 413225717U, 413026183U, 412828747U, + 412631039U, 412431941U, 412232773U, 412034221U, 411835729U, 411636413U, + 411439513U, 411240233U, 411042397U, 410843287U, 410646013U, 410449189U, + 410249803U, 410050819U, 409853333U, 409656281U, 409458463U, 409258793U, + 409058711U, 408860971U, 408664187U, 408464179U, 408266189U, 408065837U, + 407867311U, 407669081U, 407471927U, 407271439U, 407073881U, 406877249U, + 406679659U, 406479001U, 406280117U, 406082849U, 405884041U, 405687781U, + 405490279U, 405291479U, 405093827U, 404895737U, 404697413U, 404499299U, + 404301481U, 404102047U, 403904159U, 403705843U, 403507213U, 403310881U, + 403112621U, 402915971U, 402715903U, 402517751U, 402320783U, 402121381U, + 401923957U, 401724599U, 401528717U, 401332213U, 401131697U, 400931189U, + 400733779U, 400535969U, 400336843U, 400139683U, 399941057U, 399744157U, + 399547763U, 399350779U, 399152113U, 398954053U, 398755499U, 398555467U, + 398357359U, 398159819U, 397961419U, 397764043U, 397567669U, 397369877U, + 397171807U, 396973267U, 396774629U, 396577301U, 396379943U, 396181067U, + 395980789U, 395781667U, 395584159U, 395385007U, 395188181U, 394990331U, + 394794503U, 394596827U, 394396969U, 394198813U, 394002709U, 393804911U, + 393606827U, 393408269U, 393210053U, 393009401U, 392811593U, 392612743U, + 392415109U, 392218621U, 392022847U, 391824457U, 391626553U, 391429637U, + 391231889U, 391033793U, 390835553U, 390637921U, 390441223U, 390241699U, + 390042449U, 389843183U, 389645681U, 389447621U, 389248823U, 389052439U, + 388855781U, 388656199U, 388459307U, 388259567U, 388061561U, 387864629U, + 387667837U, 387469879U, 387272381U, 387076399U, 386878507U, 386682287U, + 386482841U, 386284729U, 386088091U, 385888673U, 385690637U, 385492399U, + 385295177U, 385097183U, 384897481U, 384702599U, 384503279U, 384303877U, + 384105457U, 383910119U, 383710697U, 383513033U, 383314843U, 383118283U, + 382920323U, 382722091U, 382526117U, 382327081U, 382131317U, 381932543U, + 381733871U, 381536263U, 381339001U, 381141713U, 380943287U, 380745119U, + 380549473U, 380353643U, 380155829U, 379959787U, 379761233U, 379564693U, + 379368433U, 379169093U, 378972059U, 378774973U, 378576661U, 378379069U, + 378181577U, 377986579U, 377790331U, 377593961U, 377396317U, 377199353U, + 377001491U, 376804807U, 376607597U, 376412041U, 376214897U, 376016687U, + 375818951U, 375622451U, 375423943U, 375226717U, 375030277U, 374835067U, + 374637187U, 374441663U, 374245843U, 374049421U, 373850149U, 373652611U, + 373455721U, 373259041U, 373061153U, 372865313U, 372666439U, 372467983U, + 372269861U, 372073027U, 371875487U, 371679949U, 371481403U, 371284019U, + 371087051U, 370890119U, 370690913U, 370493017U, 370294313U, 370097443U, + 369899443U, 369703973U, 369505193U, 369307739U, 369109889U, 368911969U, + 368714663U, 368517571U, 368320279U, 368120243U, 367923209U, 367726043U, + 367529347U, 367332887U, 367135781U, 366938617U, 366741209U, 366543559U, + 366347753U, 366149503U, 365955307U, 365756527U, 365558581U, 365363857U, + 365166587U, 364970513U, 364773737U, 364575859U, 364377521U, 364179511U, + 363983131U, 363785197U, 363588817U, 363390553U, 363195181U, 362999201U, + 362803139U, 362604239U, 362406371U, 362210389U, 362014487U, 361815557U, + 361619017U, 361423003U, 361226137U, 361028461U, 360832673U, 360635521U, + 360439447U, 360240187U, 360040679U, 359842253U, 359645311U, 359447687U, + 359249707U, 359052313U, 358858273U, 358661063U, 358463939U, 358266409U, + 358068593U, 357872413U, 357675007U, 357478169U, 357280499U, 357083897U, + 356885869U, 356688811U, 356492189U, 356295151U, 356098751U, 355901947U, + 355704463U, 355507771U, 355309891U, 355114247U, 354917833U, 354720913U, + 354523361U, 354326381U, 354130529U, 353933969U, 353737781U, 353539999U, + 353342723U, 353145461U, 352948801U, 352753501U, 352555993U, 352360607U, + 352163509U, 351967027U, 351769367U, 351572531U, 351374641U, 351177149U, + 350980813U, 350785063U, 350585953U, 350388953U, 350192669U, 349996081U, + 349801069U, 349605001U, 349408399U, 349212121U, 349017743U, 348820009U, + 348624013U, 348426301U, 348229087U, 348031709U, 347834699U, 347637391U, + 347439167U, 347242471U, 347044981U, 346849813U, 346652567U, 346454621U, + 346257913U, 346061753U, 345865753U, 345669557U, 345473837U, 345275929U, + 345078781U, 344882101U, 344684033U, 344488973U, 344292059U, 344097217U, + 343898977U, 343703963U, 343508807U, 343311377U, 343115831U, 342919721U, + 342722383U, 342523879U, 342328037U, 342131789U, 341935313U, 341738809U, + 341541943U, 341347519U, 341150387U, 340953829U, 340757311U, 340561127U, + 340364267U, 340168667U, 339974029U, 339778027U, 339582403U, 339384623U, + 339187153U, 338991377U, 338796769U, 338599637U, 338403323U, 338206987U, + 338010899U, 337813561U, 337615627U, 337419529U, 337223017U, 337028317U, + 336830243U, 336634169U, 336437867U, 336240617U, 336046489U, 335848273U, + 335650519U, 335451937U, 335257631U, 335061379U, 334866143U, 334671119U, + 334475023U, 334278407U, 334081999U, 333885493U, 333689641U, 333493817U, + 333295159U, 333099301U, 332902267U, 332708333U, 332513537U, 332317099U, + 332121589U, 331923899U, 331726243U, 331530721U, 331334567U, 331139597U, + 330943961U, 330746777U, 330549281U, 330353497U, 330155801U, 329958217U, + 329761063U, 329565997U, 329372503U, 329175647U, 328979237U, 328784177U, + 328586053U, 328389337U, 328193059U, 327995519U, 327800741U, 327605669U, + 327410011U, 327213077U, 327017179U, 326821853U, 326623663U, 326428433U, + 326231999U, 326037541U, 325842991U, 325645601U, 325448521U, 325253213U, + 325057771U, 324862957U, 324666421U, 324471799U, 324273199U, 324076547U, + 323881451U, 323686007U, 323491559U, 323294771U, 323098057U, 322903201U, + 322706641U, 322510327U, 322315337U, 322119839U, 321923383U, 321727409U, + 321530717U, 321333583U, 321137129U, 320941081U, 320744891U, 320551463U, + 320355521U, 320159297U, 319962779U, 319766467U, 319571167U, 319375031U, + 319180403U, 318982711U, 318785903U, 318589429U, 318393197U, 318196201U, + 318000107U, 317805539U, 317609239U, 317414249U, 317218159U, 317021557U, + 316825007U, 316630189U, 316434571U, 316240933U, 316042729U, 315846803U, + 315650969U, 315456887U, 315260969U, 315064801U, 314867783U, 314671963U, + 314475647U, 314281483U, 314084747U, 313889507U, 313693873U, 313499171U, + 313301939U, 313106369U, 312911791U, 312714757U, 312520513U, 312326171U, + 312130883U, 311935249U, 311740393U, 311544097U, 311348537U, 311150603U, + 310954757U, 310760423U, 310565063U, 310367201U, 310172567U, 309976889U, + 309780833U, 309585277U, 309390391U, 309194843U, 308999861U, 308803367U, + 308608061U, 308414591U, 308219759U, 308025181U, 307831889U, 307635407U, + 307438961U, 307243633U, 307049789U, 306853601U, 306659321U, 306462509U, + 306268327U, 306071489U, 305877857U, 305682331U, 305488069U, 305293357U, + 305095501U, 304900741U, 304706543U, 304511563U, 304317733U, 304123049U, + 303926687U, 303730639U, 303533579U, 303337841U, 303142717U, 302947639U, + 302751403U, 302556227U, 302360789U, 302164789U, 301969669U, 301774477U, + 301578371U, 301384009U, 301189789U, 300993977U, 300799193U, 300604537U, + 300409147U, 300214097U, 300018991U, 299824153U, 299630267U, 299435627U, + 299240393U, 299045213U, 298849277U, 298652239U, 298456597U, 298263409U, + 298066163U, 297872719U, 297677909U, 297481843U, 297285559U, 297091783U, + 296897011U, 296700601U, 296505931U, 296311601U, 296116567U, 295921999U, + 295726633U, 295531559U, 295336793U, 295140841U, 294942679U, 294748271U, + 294553247U, 294359101U, 294165023U, 293968579U, 293776391U, 293581697U, + 293386861U, 293190439U, 292996973U, 292800799U, 292605169U, 292409519U, + 292215767U, 292021063U, 291827639U, 291633949U, 291437387U, 291242587U, + 291048767U, 290854877U, 290661247U, 290463907U, 290269211U, 290071961U, + 289876151U, 289683391U, 289489001U, 289295263U, 289099033U, 288904207U, + 288709153U, 288515441U, 288322451U, 288125489U, 287931167U, 287736619U, + 287540761U, 287346179U, 287151391U, 286959503U, 286764607U, 286568573U, + 286374031U, 286178987U, 285983519U, 285789107U, 285594181U, 285399307U, + 285205703U, 285008237U, 284812981U, 284618359U, 284422013U, 284227513U, + 284032559U, 283836739U, 283642439U, 283449623U, 283255697U, 283058701U, + 282864317U, 282669041U, 282475181U, 282280811U, 282085339U, 281889917U, + 281695201U, 281500633U, 281306489U, 281113423U, 280918579U, 280723097U, + 280528693U, 280334149U, 280141241U, 279946393U, 279751027U, 279560293U, + 279365003U, 279170747U, 278975017U, 278780989U, 278585389U, 278389271U, + 278195611U, 278001011U, 277805389U, 277611193U, 277419089U, 277225111U, + 277029673U, 276835171U, 276644429U, 276448457U, 276252617U, 276058423U, + 275863681U, 275669291U, 275475751U, 275281729U, 275088881U, 274894013U, + 274697779U, 274504193U, 274310441U, 274117891U, 273924907U, 273730747U, + 273535697U, 273342491U, 273147961U, 272953697U, 272758777U, 272564821U, + 272371163U, 272178229U, 271982563U, 271787753U, 271595333U, 271400323U, + 271206511U, 271009061U, 270814079U, 270619381U, 270427243U, 270232243U, + 270036869U, 269844067U, 269647501U, 269451593U, 269257223U, 269063869U, + 268870291U, 268676921U, 268483349U, 268290353U, 268094273U, 267900641U, + 267707107U, 267513931U, 267318967U, 267123811U, 266929331U, 266735921U, + 266541529U, 266344789U, 266149801U, 265955761U, 265762681U, 265568717U, + 265376333U, 265184369U, 264990793U, 264798371U, 264604061U, 264408223U, + 264215219U, 264021649U, 263825923U, 263631391U, 263435899U, 263239267U, + 263046703U, 262852531U, 262658387U, 262464793U, 262271809U, 262080089U, + 261886379U, 261692357U, 261498031U, 261306077U, 261112427U, 260918267U, + 260725741U, 260532791U, 260338409U, 260144699U, 259950673U, 259756537U, + 259560409U, 259367083U, 259174913U, 258980681U, 258786469U, 258593123U, + 258399347U, 258205139U, 258011459U, 257818237U, 257623973U, 257431091U, + 257237641U, 257044279U, 256853161U, 256658621U, 256462571U, 256266811U, + 256073957U, 255879553U, 255687011U, 255493417U, 255301757U, 255107311U, + 254913271U, 254719727U, 254527073U, 254334673U, 254141203U, 253946449U, + 253754503U, 253559893U, 253366097U, 253173623U, 252979483U, 252786907U, + 252591419U, 252398903U, 252204389U, 252012149U, 251819627U, 251622391U, + 251429363U, 251237071U, 251043629U, 250851683U, 250658201U, 250465169U, + 250271443U, 250077787U, 249883757U, 249690719U, 249497777U, 249303823U, + 249110591U, 248917909U, 248722577U, 248531111U, 248338187U, 248146201U, + 247953331U, 247759651U, 247565719U, 247371941U, 247179193U, 246985139U, + 246791761U, 246598217U, 246406241U, 246212237U, 246018317U, 245824157U, + 245630933U, 245437499U, 245244113U, 245050829U, 244859389U, 244669351U, + 244476997U, 244284641U, 244092203U, 243896459U, 243703637U, 243509891U, + 243316207U, 243123827U, 242930803U, 242737823U, 242542541U, 242349871U, + 242155003U, 241962229U, 241768279U, 241573951U, 241381463U, 241187647U, + 240994267U, 240802189U, 240609661U, 240417691U, 240225439U, 240033793U, + 239840473U, 239647459U, 239455163U, 239262083U, 239068651U, 238874029U, + 238681423U, 238488847U, 238295927U, 238103737U, 237912613U, 237719497U, + 237528143U, 237335599U, 237142793U, 236950423U, 236759689U, 236566277U, + 236372723U, 236180239U, 235988591U, 235796063U, 235601153U, 235409131U, + 235218167U, 235025429U, 234833069U, 234642053U, 234449203U, 234255401U, + 234063703U, 233870243U, 233675419U, 233483567U, 233289703U, 233095871U, + 232901521U, 232711207U, 232517699U, 232323913U, 232130593U, 231937631U, + 231744913U, 231553181U, 231360061U, 231167999U, 230975573U, 230782369U, + 230591323U, 230400697U, 230206813U, 230014139U, 229822447U, 229631383U, + 229437889U, 229244651U, 229050709U, 228859753U, 228667319U, 228474931U, + 228283373U, 228091951U, 227898883U, 227705561U, 227510263U, 227318057U, + 227125973U, 226933331U, 226741129U, 226549201U, 226356973U, 226164139U, + 225972629U, 225781723U, 225588239U, 225395087U, 225201127U, 225008657U, + 224817499U, 224623351U, 224430487U, 224238809U, 224047783U, 223854737U, + 223660903U, 223470251U, 223278821U, 223088597U, 222898021U, 222703603U, + 222513397U, 222320779U, 222128581U, 221936789U, 221745649U, 221553767U, + 221359997U, 221169271U, 220977649U, 220785023U, 220592791U, 220400603U, + 220207301U, 220014643U, 219822851U, 219630181U, 219437957U, 219245029U, + 219053453U, 218861609U, 218669813U, 218477293U, 218283259U, 218092937U, + 217902037U, 217708723U, 217515989U, 217323787U, 217133011U, 216939881U, + 216748201U, 216554441U, 216362941U, 216171331U, 215979851U, 215787829U, + 215595199U, 215402939U, 215211307U, 215019767U, 214829773U, 214638997U, + 214447763U, 214255211U, 214063807U, 213871681U, 213679183U, 213484949U, + 213293911U, 213101849U, 212911249U, 212719163U, 212526101U, 212335061U, + 212143537U, 211951819U, 211758037U, 211566871U, 211375777U, 211184881U, + 210993641U, 210801817U, 210609337U, 210416527U, 210224867U, 210032651U, + 209840663U, 209650703U, 209460331U, 209269979U, 209078249U, 208885571U, + 208694699U, 208503187U, 208309727U, 208118389U, 207925591U, 207734029U, + 207542903U, 207352543U, 207161509U, 206968849U, 206778353U, 206587259U, + 206395493U, 206205443U, 206012971U, 205821611U, 205629667U, 205438339U, + 205246957U, 205056107U, 204863557U, 204673607U, 204481997U, 204291247U, + 204098737U, 203907721U, 203717797U, 203524921U, 203334251U, 203142649U, + 202952569U, 202762199U, 202569253U, 202376893U, 202185367U, 201993299U, + 201804233U, 201612913U, 201420629U, 201230069U, 201038863U, 200847253U, + 200655667U, 200466187U, 200271727U, 200082481U, 199893791U, 199701701U, + 199509859U, 199319431U, 199128547U, 198937253U, 198745559U, 198554557U, + 198365039U, 198174583U, 197981587U, 197790517U, 197598103U, 197405587U, + 197214601U, 197022479U, 196832221U, 196641343U, 196450417U, 196258003U, + 196065559U, 195875749U, 195684091U, 195493957U, 195301861U, 195110033U, + 194920021U, 194730253U, 194538937U, 194348221U, 194157839U, 193967047U, + 193777123U, 193586951U, 193397299U, 193205863U, 193014079U, 192823493U, + 192634577U, 192444121U, 192253307U, 192063899U, 191872073U, 191680613U, + 191488183U, 191296309U, 191105209U, 190913759U, 190722271U, 190531303U, + 190340209U, 190148869U, 189959467U, 189768749U, 189578791U, 189386867U, + 189195871U, 189006953U, 188817067U, 188626177U, 188434369U, 188243597U, + 188051989U, 187862693U, 187672487U, 187479947U, 187290289U, 187101599U, + 186909721U, 186718979U, 186529927U, 186340093U, 186149101U, 185957879U, + 185767973U, 185576759U, 185386519U, 185196007U, 185006201U, 184815809U, + 184626997U, 184437511U, 184248707U, 184057999U, 183868519U, 183677189U, + 183489073U, 183299393U, 183108421U, 182919001U, 182726549U, 182535739U, + 182343781U, 182154179U, 181962689U, 181771903U, 181582549U, 181390861U, + 181200457U, 181010399U, 180818789U, 180628141U, 180437107U, 180246329U, + 180056753U, 179865403U, 179677123U, 179488103U, 179298667U, 179108591U, + 178917853U, 178729183U, 178538917U, 178348147U, 178156337U, 177967877U, + 177779429U, 177589199U, 177399011U, 177208567U, 177020047U, 176829997U, + 176641147U, 176450971U, 176261209U, 176070889U, 175881457U, 175690829U, + 175501171U, 175312391U, 175124483U, 174934229U, 174744569U, 174553387U, + 174362887U, 174173123U, 173984141U, 173793853U, 173603611U, 173414587U, + 173225827U, 173036407U, 172846613U, 172655837U, 172466647U, 172276381U, + 172087627U, 171897619U, 171708997U, 171518131U, 171328837U, 171140153U, + 170951563U, 170762941U, 170571809U, 170381957U, 170191919U, 170004691U, + 169814977U, 169624019U, 169434773U, 169248449U, 169058089U, 168869417U, + 168679261U, 168490577U, 168301619U, 168112519U, 167921771U, 167733523U, + 167543461U, 167355193U, 167165281U, 166977197U, 166787039U, 166597537U, + 166409207U, 166221217U, 166031297U, 165842861U, 165653129U, 165462509U, + 165272743U, 165083201U, 164893327U, 164702893U, 164514887U, 164325341U, + 164135749U, 163945493U, 163758097U, 163569001U, 163380533U, 163193077U, + 163003367U, 162815113U, 162625381U, 162435659U, 162247079U, 162058889U, + 161868769U, 161679187U, 161490583U, 161299297U, 161109331U, 160920703U, + 160733017U, 160544453U, 160355989U, 160166753U, 159978367U, 159790819U, + 159601727U, 159412639U, 159223517U, 159034937U, 158847659U, 158657761U, + 158466983U, 158277827U, 158087929U, 157899923U, 157711129U, 157521739U, + 157333247U, 157144913U, 156955559U, 156766583U, 156578579U, 156389789U, + 156200969U, 156012877U, 155824663U, 155635999U, 155449181U, 155259329U, + 155071097U, 154882151U, 154692103U, 154504913U, 154316737U, 154127989U, + 153937877U, 153750617U, 153563087U, 153374737U, 153184901U, 152998253U, + 152808611U, 152622137U, 152433731U, 152244559U, 152054831U, 151864819U, + 151676659U, 151488713U, 151299593U, 151112447U, 150922319U, 150734347U, + 150543803U, 150355943U, 150167639U, 149979413U, 149790647U, 149602613U, + 149414519U, 149226059U, 149036633U, 148848053U, 148660459U, 148473037U, + 148284233U, 148095697U, 147908051U, 147719849U, 147530927U, 147342497U, + 147154583U, 146967131U, 146779973U, 146592161U, 146404283U, 146215987U, + 146028829U, 145840997U, 145653953U, 145465849U, 145277879U, 145088759U, + 144900647U, 144710743U, 144522883U, 144335641U, 144148133U, 143960009U, + 143772731U, 143584663U, 143397817U, 143211583U, 143023403U, 142836769U, + 142649069U, 142460501U, 142273903U, 142086817U, 141901079U, 141713353U, + 141526009U, 141337631U, 141150731U, 140963029U, 140773079U, 140585771U, + 140397097U, 140208613U, 140020883U, 139833637U, 139647301U, 139459559U, + 139273223U, 139084727U, 138896581U, 138710941U, 138523223U, 138335569U, + 138146971U, 137958407U, 137770219U, 137581757U, 137396477U, 137209543U, + 137020991U, 136832713U, 136645373U, 136459727U, 136273777U, 136085947U, + 135898517U, 135710527U, 135521381U, 135334181U, 135146093U, 134959613U, + 134773459U, 134586799U, 134399621U, 134213483U, 134026553U, 133838149U, + 133651027U, 133462151U, 133276543U, 133087957U, 132901367U, 132714497U, + 132526507U, 132339761U, 132152729U, 131965111U, 131777039U, 131591081U, + 131403011U, 131217089U, 131030267U, 130844327U, 130658131U, 130471373U, + 130284131U, 130096721U, 129908039U, 129720413U, 129533941U, 129348269U, + 129161959U, 128974297U, 128787667U, 128603047U, 128417117U, 128229061U, + 128042461U, 127856539U, 127670819U, 127482731U, 127296359U, 127108343U, + 126923837U, 126736237U, 126549919U, 126363241U, 126176537U, 125990521U, + 125804839U, 125619577U, 125431459U, 125245501U, 125059483U, 124873351U, + 124686977U, 124499801U, 124313051U, 124128931U, 123941581U, 123756023U, + 123570427U, 123384229U, 123198661U, 123012431U, 122825713U, 122640377U, + 122453621U, 122265487U, 122079197U, 121893817U, 121707613U, 121521013U, + 121334561U, 121148387U, 120964253U, 120777233U, 120590153U, 120403117U, + 120216113U, 120030817U, 119846431U, 119659843U, 119473723U, 119288087U, + 119101837U, 118913621U, 118726159U, 118540469U, 118355789U, 118168691U, + 117983309U, 117797447U, 117610693U, 117426377U, 117239467U, 117053617U, + 116868613U, 116680763U, 116495963U, 116310731U, 116124461U, 115940059U, + 115755071U, 115570151U, 115383889U, 115197619U, 115012217U, 114826507U, + 114639611U, 114453901U, 114268459U, 114083461U, 113896997U, 113710601U, + 113523551U, 113337607U, 113151163U, 112968187U, 112781413U, 112597567U, + 112410863U, 112224869U, 112041313U, 111856057U, 111671939U, 111485417U, + 111300359U, 111113659U, 110927723U, 110742817U, 110558197U, 110373097U, + 110185429U, 110000207U, 109816123U, 109631227U, 109445953U, 109261027U, + 109076729U, 108891301U, 108706319U, 108520781U, 108338011U, 108154273U, + 107969483U, 107783167U, 107599229U, 107414033U, 107229569U, 107045951U, + 106860881U, 106674979U, 106491023U, 106305917U, 106121371U, 105936421U, + 105751201U, 105566597U, 105380491U, 105195661U, 105011527U, 104826877U, + 104640791U, 104456647U, 104271161U, 104088581U, 103905899U, 103720889U, + 103535363U, 103351607U, 103166803U, 102982193U, 102797509U, 102611801U, + 102428533U, 102245177U, 102061153U, 101878417U, 101693441U, 101508191U, + 101324557U, 101140019U, 100957291U, 100772813U, 100587523U, 100402817U, + 100217561U, 100034317U, 99851249U, 99665549U, 99482633U, 99298943U, + 99112829U, 98929081U, 98743261U, 98558099U, 98374879U, 98191759U, + 98006033U, 97821839U, 97638559U, 97456841U, 97272631U, 97087433U, + 96904513U, 96719809U, 96537893U, 96353401U, 96168011U, 95983787U, + 95801747U, 95616853U, 95433263U, 95249807U, 95066039U, 94883111U, + 94700833U, 94516717U, 94333933U, 94149721U, 93966659U, 93784181U, + 93599687U, 93415661U, 93232427U, 93049301U, 92863711U, 92681111U, + 92497303U, 92313943U, 92129753U, 91947211U, 91761893U, 91580219U, + 91395749U, 91213127U, 91030321U, 90846887U, 90664879U, 90480161U, + 90297667U, 90115583U, 89933297U, 89749379U, 89564353U, 89380243U, + 89196911U, 89014231U, 88831753U, 88648711U, 88464433U, 88281301U, + 88099309U, 87918041U, 87735311U, 87551473U, 87368143U, 87185521U, + 87002527U, 86819059U, 86635727U, 86454139U, 86271967U, 86087539U, + 85905473U, 85723789U, 85539823U, 85358417U, 85175957U, 84992489U, + 84809147U, 84626603U, 84444043U, 84260999U, 84077507U, 83895419U, + 83714789U, 83531321U, 83348579U, 83165221U, 82982057U, 82800373U, + 82619401U, 82436671U, 82253887U, 82070687U, 81889261U, 81706409U, + 81524419U, 81342557U, 81159839U, 80980007U, 80798779U, 80617753U, + 80435371U, 80253763U, 80072779U, 79888511U, 79706771U, 79525021U, + 79343701U, 79161149U, 78979279U, 78796441U, 78615211U, 78433877U, + 78250223U, 78068383U, 77887133U, 77705807U, 77523223U, 77341399U, + 77159333U, 76977959U, 76797257U, 76614667U, 76431583U, 76249919U, + 76067633U, 75886747U, 75706193U, 75523937U, 75343739U, 75163607U, + 74982307U, 74800723U, 74619133U, 74438183U, 74256739U, 74075017U, + 73892317U, 73710739U, 73531123U, 73349173U, 73168181U, 72986443U, + 72806519U, 72624863U, 72443671U, 72262847U, 72083749U, 71902819U, + 71721367U, 71540317U, 71360867U, 71180273U, 70999073U, 70818323U, + 70636019U, 70455323U, 70275589U, 70095271U, 69913423U, 69732599U, + 69552737U, 69373621U, 69192857U, 69011251U, 68831857U, 68650541U, + 68469409U, 68288557U, 68108351U, 67927511U, 67746827U, 67567627U, + 67387867U, 67208347U, 67028069U, 66848311U, 66666751U, 66487507U, + 66307727U, 66128837U, 65950439U, 65770451U, 65589409U, 65410649U, + 65230259U, 65049041U, 64870343U, 64688747U, 64507787U, 64327903U, + 64147561U, 63968063U, 63789757U, 63610199U, 63430931U, 63251467U, + 63071809U, 62892839U, 62713073U, 62532517U, 62352571U, 62173597U, + 61994887U, 61815977U, 61636231U, 61456183U, 61275419U, 61094951U, + 60915853U, 60737837U, 60559241U, 60379751U, 60201523U, 60021539U, + 59841973U, 59663497U, 59484767U, 59305187U, 59125333U, 58945219U, + 58767607U, 58589033U, 58410523U, 58231967U, 58052879U, 57873817U, + 57694499U, 57514829U, 57335981U, 57158411U, 56980423U, 56800753U, + 56624527U, 56446043U, 56266219U, 56088649U, 55910791U, 55732351U, + 55555231U, 55376369U, 55197721U, 55019897U, 54841331U, 54662059U, + 54485107U, 54306403U, 54126781U, 53949167U, 53770853U, 53593171U, + 53413639U, 53235829U, 53058007U, 52880033U, 52702613U, 52525171U, + 52347107U, 52168973U, 51990767U, 51813187U, 51636499U, 51458861U, + 51281453U, 51104257U, 50925361U, 50748149U, 50570687U, 50394067U, + 50216953U, 50039263U, 49861883U, 49684643U, 49508111U, 49332421U, + 49155797U, 48978451U, 48802009U, 48623479U, 48446927U, 48269713U, + 48092383U, 47913799U, 47737211U, 47559517U, 47382877U, 47205551U, + 47028899U, 46852483U, 46675831U, 46499939U, 46323493U, 46146389U, + 45969251U, 45792757U, 45616187U, 45441163U, 45266317U, 45089893U, + 44914523U, 44738009U, 44563219U, 44387113U, 44210707U, 44034449U, + 43858921U, 43682351U, 43505453U, 43330681U, 43154911U, 42978773U, + 42801313U, 42625673U, 42449963U, 42274433U, 42100169U, 41923451U, + 41748299U, 41572033U, 41396093U, 41219881U, 41044891U, 40868299U, + 40695289U, 40518707U, 40343419U, 40168781U, 39994211U, 39817907U, + 39642653U, 39468991U, 39294637U, 39120883U, 38945273U, 38772131U, + 38597917U, 38422801U, 38249219U, 38075273U, 37901167U, 37725713U, + 37551001U, 37377479U, 37201921U, 37029367U, 36854551U, 36679801U, + 36505093U, 36330773U, 36157423U, 35984339U, 35809141U, 35635627U, + 35461177U, 35287939U, 35114207U, 34939903U, 34767391U, 34591933U, + 34418939U, 34244071U, 34069129U, 33893689U, 33721511U, 33548077U, + 33374401U, 33202313U, 33028577U, 32856277U, 32682743U, 32509907U, + 32337311U, 32163991U, 31991731U, 31819127U, 31646471U, 31473479U, + 31300459U, 31127519U, 30953453U, 30781319U, 30609311U, 30437177U, + 30265159U, 30092813U, 29922733U, 29750759U, 29579519U, 29406439U, + 29235953U, 29062879U, 28890787U, 28718537U, 28546591U, 28374859U, + 28204291U, 28031611U, 27861667U, 27689833U, 27518653U, 27347557U, + 27174779U, 27004343U, 26834293U, 26662327U, 26491921U, 26321989U, + 26150171U, 25979521U, 25809083U, 25638607U, 25468039U, 25298069U, + 25124909U, 24955681U, 24783713U, 24614839U, 24444313U, 24274847U, + 24105251U, 23935453U, 23765431U, 23595163U, 23425559U, 23256053U, + 23085833U, 22916461U, 22747187U, 22578419U, 22409393U, 22239713U, + 22068143U, 21900377U, 21731779U, 21563219U, 21394229U, 21226157U, + 21056153U, 20887649U, 20718781U, 20551697U, 20382253U, 20213983U, + 20045197U, 19878041U, 19710289U, 19541903U, 19374079U, 19206023U, + 19038311U, 18870161U, 18703387U, 18536303U, 18368221U, 18201941U, + 18033391U, 17866619U, 17699107U, 17532169U, 17366749U, 17201039U, + 17032781U, 16867867U, 16702099U, 16535639U, 16369853U, 16203367U, + 16036523U, 15870383U, 15705071U, 15539987U, 15374041U, 15208997U, + 15042919U, 14876951U, 14712427U, 14547283U, 14382007U, 14218571U, + 14053619U, 13887953U, 13724233U, 13560847U, 13395559U, 13231343U, + 13067423U, 12902137U, 12738433U, 12575881U, 12411409U, 12249493U, + 12086059U, 11923057U, 11760059U, 11597701U, 11435887U, 11272697U, + 11109827U, 10947941U, 10786267U, 10624787U, 10463443U, 10302407U, + 10140307U, 9979111U, 9817057U, 9655759U, 9495601U, 9334487U, 9174793U, + 9014101U, 8853359U, 8693653U, 8534489U, 8375273U, 8215633U, 8056423U, + 7896949U, 7738559U, 7580459U, 7421383U, 7263143U, 7104341U, 6947753U, + 6791437U, 6633877U, 6477301U, 6319483U, 6163567U, 6007247U, 5851717U, + 5695831U, 5539363U, 5383601U, 5229331U, 5074633U, 4920613U, 4766999U, + 4613237U, 4459951U, 4307453U, 4154791U, 4002547U, 3849943U, 3698881U, + 3548471U, 3396661U, 3246119U, 3097141U, 2948161U, 2799451U, 2650931U, + 2503597U, 2356573U, 2209499U, 2063573U, 1918439U, 1774937U, 1630987U, + 1488133U, 1346567U, 1205653U, 1066909U, 927853U, 791447U, 656683U, + 523417U, 393073U, 266083U, 143687U }; - - -/*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ +/*********************************************************************************** + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/SRC/primes_32.cpp sprng5/SRC/primes_32.cpp --- sprng5.orig/SRC/primes_32.cpp 2014-08-25 17:56:49.000000000 +0000 +++ sprng5/SRC/primes_32.cpp 2021-05-25 14:54:16.000000000 +0000 @@ -3,147 +3,125 @@ #include #include "primes_32.h" #include "primelist_32.h" - using namespace std; - #define YES 1 #define NO 0 #define NPRIMES 1000 - #define primes primes32 - int primes[NPRIMES]; -int init_prime_32(void) +int init_prime_32 (void) { int i, j, obtained = 0, isprime; - - for(i=3; i < MINPRIME; i += 2) + for (i = 3; i < MINPRIME; i += 2) { isprime = YES; - - for(j=0; j < obtained; j++) - if(i%primes[j] == 0) - { - isprime = NO; - break; - } - else if(primes[j]*primes[j] > i) - break; - - if(isprime == YES) - { - primes[obtained] = i; - obtained++; - } + for (j = 0; j < obtained; j++) + if (i % primes[j] == 0) + { + isprime = NO; + break; + } + else if (primes[j] * primes[j] > i) + break; + if (isprime == YES) + { + primes[obtained] = i; + obtained++; } - + } return obtained; } - - -int getprime_32(int need, int *prime_array, int offset) +int getprime_32 (int need, int *prime_array, int offset) { static int initiallized = NO, num_prime; int largest; int i, isprime, index, obtained = 0; - - if(need <= 0) + if (need <= 0) { - fprintf(stderr,"WARNING: Number of primes needed = %d < 1; None returned\n" - , need); + fprintf (stderr, + "WARNING: Number of primes needed = %d < 1; None returned\n", + need); return 0; } - - if(offset < 0) + + if (offset < 0) { - fprintf(stderr,"WARNING: Offset of prime = %d < 1; None returned\n" - , offset); + fprintf (stderr, + "WARNING: Offset of prime = %d < 1; None returned\n", + offset); return 0; } - - - if(offset+need-1 MAXPRIMEOFFSET) + if (offset > MAXPRIMEOFFSET) { - fprintf(stderr,"WARNING: generator has branched maximum number of times;\nindependence of generators no longer guaranteed"); - offset = offset % MAXPRIMEOFFSET; + fprintf (stderr, + "WARNING: generator has branched maximum number of times;\nindependence of generators no longer guaranteed"); + offset = offset % MAXPRIMEOFFSET; } - - if(offset < PRIMELISTSIZE1) /* search table for previous prime */ + if (offset < PRIMELISTSIZE1) /* search table for previous prime */ { largest = prime_list_32[offset] + 2; offset = 0; } else { - index = (int) ((offset-PRIMELISTSIZE1+1)/STEP) + PRIMELISTSIZE1 - 1; + index = (int) ((offset - PRIMELISTSIZE1 + 1) / STEP) + PRIMELISTSIZE1 - 1; largest = prime_list_32[index] + 2; - offset -= (index-PRIMELISTSIZE1+1)*STEP + PRIMELISTSIZE1 - 1; + offset -= (index - PRIMELISTSIZE1 + 1) * STEP + PRIMELISTSIZE1 - 1; } - - - while(need > obtained && largest > MINPRIME) + while (need > obtained && largest > MINPRIME) { - isprime = YES; - largest -= 2; - for(i=0; i 0) - offset--; - else if(isprime == YES) - prime_array[obtained++] = largest; + isprime = YES; + largest -= 2; + for (i = 0; i < num_prime; i++) + if (largest % primes[i] == 0) + { + isprime = NO; + break; } - - if(need > obtained) - fprintf(stderr,"ERROR: Insufficient number of primes: needed %d, obtained %d\n", need, obtained); - + if (isprime == YES && offset > 0) + offset--; + else if (isprime == YES) + prime_array[obtained++] = largest; + } + if (need > obtained) + fprintf (stderr, + "ERROR: Insufficient number of primes: needed %d, obtained %d\n", + need, obtained); return obtained; } - #if 0 main() { int newprimes[1500], np, i; - np = getprime_32(2,newprimes,0); np = getprime_32(2,newprimes+2,9); np = getprime_32(2,newprimes+4,12); - - for(i=0; i<6; i++) - printf("%d. %d \n", i, newprimes[i]); +for(i=0; i<6; i++) + printf("%d. %d \n", i, newprimes[i]); } #endif - - -/*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ + +/*********************************************************************************** + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/SRC/primes_32.h sprng5/SRC/primes_32.h --- sprng5.orig/SRC/primes_32.h 2014-08-25 17:56:46.000000000 +0000 +++ sprng5/SRC/primes_32.h 2021-01-15 16:26:40.000000000 +0000 @@ -8,14 +8,13 @@ #define MAXPRIMEOFFSET 779156 #endif - - -/*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ + +/*********************************************************************************** + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/SRC/primes_64.cpp sprng5/SRC/primes_64.cpp --- sprng5.orig/SRC/primes_64.cpp 2014-08-25 17:56:49.000000000 +0000 +++ sprng5/SRC/primes_64.cpp 2021-05-25 14:54:16.000000000 +0000 @@ -3,148 +3,124 @@ #include #include "primes_64.h" #include "primelist_64.h" - using namespace std; - #define YES 1 #define NO 0 #define NPRIMES 10000 - #define primes primes64 - int primes[NPRIMES]; -int init_prime_64(void) +int init_prime_64 (void) { int i, j, obtained = 0, isprime; - - for(i=3; i < MINPRIME; i += 2) + for (i = 3; i < MINPRIME; i += 2) { isprime = YES; - - for(j=0; j < obtained; j++) - if(i%primes[j] == 0) - { - isprime = NO; - break; - } - else if(primes[j]*primes[j] > i) - break; - - if(isprime == YES) - { - primes[obtained] = i; - obtained++; - } + for (j = 0; j < obtained; j++) + if (i % primes[j] == 0) + { + isprime = NO; + break; } - + else if (primes[j] * primes[j] > i) + break; + if (isprime == YES) + { + primes[obtained] = i; + obtained++; + } + } return obtained; } - - - -int getprime_64(int need, unsigned int *prime_array, int offset) +int getprime_64 (int need, unsigned int *prime_array, int offset) { static int initiallized = NO, num_prime; unsigned int largest; int i, isprime, index, obtained = 0; - - if(need <= 0) + if (need <= 0) { - fprintf(stderr,"WARNING: Number of primes needed = %d < 1; None returned\n" - , need); - return 0; + fprintf (stderr, + "WARNING: Number of primes needed = %d < 1; None returned\n", + need); + return 0; } - - if(offset < 0) + if (offset < 0) { - fprintf(stderr,"WARNING: Offset of prime = %d < 1; None returned\n" - , offset); - return 0; + fprintf (stderr, + "WARNING: Offset of prime = %d < 1; None returned\n", + offset); + return 0; } - - - if(offset+need-1 MAXPRIMEOFFSET) + + if (offset > MAXPRIMEOFFSET) { - fprintf(stderr,"WARNING: generator has branched maximum number of times;\nindependence of generators no longer guaranteed"); + fprintf (stderr,"WARNING: generator has branched maximum number of times;\nindependence of generators no longer guaranteed"); offset = offset % MAXPRIMEOFFSET; } - - if(offset < PRIMELISTSIZE1) /* search table for previous prime */ + if (offset < PRIMELISTSIZE1) /* search table for previous prime */ { largest = prime_list_64[offset] + 2; offset = 0; } else { - index = (unsigned int) ((offset-PRIMELISTSIZE1+1)/STEP) + PRIMELISTSIZE1 - 1; - largest = prime_list_64[index] + 2; - offset -= (index-PRIMELISTSIZE1+1)*STEP + PRIMELISTSIZE1 - 1; + index = (unsigned int) ((offset - PRIMELISTSIZE1 + 1) / STEP) + + PRIMELISTSIZE1 - 1; + largest = prime_list_64[index] + 2; + offset -= (index - PRIMELISTSIZE1 + 1) * STEP + PRIMELISTSIZE1 - 1; } - - - while(need > obtained && largest > MINPRIME) + while (need > obtained && largest > MINPRIME) { isprime = YES; largest -= 2; - for(i=0; i 0) - offset--; - else if(isprime == YES) - prime_array[obtained++] = largest; + for (i = 0; i < num_prime; i++) + if (largest % primes[i] == 0) + { + isprime = NO; + break; } - - if(need > obtained) - fprintf(stderr,"ERROR: Insufficient number of primes: needed %d, obtained %d\n", need, obtained); - + if (isprime == YES && offset > 0) + offset--; + else if (isprime == YES) + prime_array[obtained++] = largest; + } + if (need > obtained) + fprintf (stderr,"ERROR: Insufficient number of primes: needed %d, obtained %d\n", + need, obtained); return obtained; } - #if 0 main() { unsigned int newprimes[1500], np, i; - np = getprime(2,newprimes,0); np = getprime(2,newprimes+2,9); np = getprime(2,newprimes+4,12); - - for(i=0; i<6; i++) + for(i=0; i<6; i++) printf("%u. %u \n", i, newprimes[i]); } #endif - - -/*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ + +/*********************************************************************************** + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/SRC/primes_64.h sprng5/SRC/primes_64.h --- sprng5.orig/SRC/primes_64.h 2014-08-25 17:56:46.000000000 +0000 +++ sprng5/SRC/primes_64.h 2021-01-15 16:26:40.000000000 +0000 @@ -2,20 +2,19 @@ #define _primes_64_h_ int getprime_64 (int need, unsigned int *prime_array, int offset); - + #define MAXPRIME 3037000501U /* largest odd # < sqrt(2)*2^31+2 */ #define MINPRIME 55108 /* sqrt(MAXPRIME) */ #define MAXPRIMEOFFSET 146138719U /* Total number of available primes */ #endif - - -/*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ + +/*********************************************************************************** + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/SRC/sprng.cpp sprng5/SRC/sprng.cpp --- sprng5.orig/SRC/sprng.cpp 2014-08-25 17:56:49.000000000 +0000 +++ sprng5/SRC/sprng.cpp 2021-05-25 14:54:16.000000000 +0000 @@ -6,194 +6,171 @@ #include "communicate.h" #include "sprng.h" #include "sprng_cpp.h" - using namespace std; - Sprng *defaultgen = NULL; -int junk; /* pass useless pointer at times */ +int junk; /* pass useless pointer at times */ int junkmpi; /********************* SIMPLE ************************/ - -int * init_rng_simple(int seed, int mult, int gtype /* = 0 */) +int* init_rng_simple (int seed, int mult, int gtype /* = 0 */) { - int myid=0, nprocs=1; - int val; - Sprng * temp; - - temp = SelectType(gtype); - - val = temp->init_rng(myid,nprocs,seed,mult); - - if(val == 0) - return NULL; - else { - if(defaultgen != NULL) - defaultgen->free_rng(); - - defaultgen = temp; - - return &junk; /* return "garbage" value */ - } + int myid = 0, nprocs = 1; + int val; + Sprng *temp; + temp = SelectType (gtype); + val = temp->init_rng (myid, nprocs, seed, mult); + if (val == 0) + return NULL; + else + { + if (defaultgen != NULL) + defaultgen->free_rng (); + defaultgen = temp; + return &junk; /* return "garbage" value */ + } } -int get_rn_int_simple() +int get_rn_int_simple () { - if(defaultgen == NULL) { - if(init_rng_simple(0,0) == NULL) { - return static_cast(-1.0); - } + if (defaultgen == NULL) + { + if (init_rng_simple (0, 0) == NULL) + { + return static_cast (-1.0); + } } + return defaultgen->get_rn_int (); +} - return defaultgen->get_rn_int(); -} - -float get_rn_flt_simple() +float get_rn_flt_simple () { - if(defaultgen == NULL) - if(init_rng_simple(0,0) == NULL) + if (defaultgen == NULL) + if (init_rng_simple (0, 0) == NULL) return -1.0; - - return defaultgen->get_rn_flt(); -} + return defaultgen->get_rn_flt (); +} - -double get_rn_dbl_simple() +double get_rn_dbl_simple () { - if(defaultgen == NULL) - if(init_rng_simple(0,0) == NULL) + if (defaultgen == NULL) + if (init_rng_simple (0, 0) == NULL) return -1.0; - - return defaultgen->get_rn_dbl(); -} + return defaultgen->get_rn_dbl (); +} -int pack_rng_simple(char **buffer) +int pack_rng_simple (char **buffer) { - if(defaultgen == NULL) + if (defaultgen == NULL) return 0; - - return defaultgen->pack_rng(buffer); + return defaultgen->pack_rng (buffer); } -int * unpack_rng_simple(char *packed, int gtype) +int* unpack_rng_simple (char *packed, int gtype) { - Sprng * temp; - int val; - - temp = SelectType(gtype); - val = temp->unpack_rng(packed); - - if(val == 0) - return NULL; - else { - if(defaultgen != NULL) - defaultgen->free_rng(); - - defaultgen = temp; - return &junk; /* return "garbage" value */ - } + Sprng *temp; + int val; + + temp = SelectType (gtype); + val = temp->unpack_rng (packed); + + if (val == 0) + return NULL; + else + { + if (defaultgen != NULL) + defaultgen->free_rng (); + + defaultgen = temp; + return &junk; /* return "garbage" value */ + } } -int print_rng_simple() +int print_rng_simple () { - if(defaultgen == NULL) { - fprintf(stderr,"WARNING: No generator initialized so far\n"); - return 0; - } - - return defaultgen->print_rng(); + if (defaultgen == NULL) + { + fprintf (stderr, + "WARNING: No generator initialized so far\n"); + return 0; + } + return defaultgen->print_rng (); } -int make_new_seed() +int make_new_seed () { time_t tp; struct tm *temp; unsigned int temp2, temp3; static unsigned int temp4 = 0xe0e1; - - time(&tp); - temp = localtime(&tp); - - temp2 = (temp->tm_sec<<26)+(temp->tm_min<<20)+(temp->tm_hour<<15)+ - (temp->tm_mday<<10)+(temp->tm_mon<<6); - temp3 = (temp->tm_year<<13)+(temp->tm_wday<<10)+(temp->tm_yday<<1)+ - temp->tm_isdst; - temp2 ^= clock()^temp3; - temp4 = (temp4*0xeeee)%0xffff; - temp2 ^= temp4<<16; - temp4 = (temp4*0xaeee)%0xffff; + time (&tp); + temp = localtime (&tp); + temp2 = (temp->tm_sec << 26) + (temp->tm_min << 20) + (temp->tm_hour << 15) + + (temp->tm_mday << 10) + (temp->tm_mon << 6); + temp3 = (temp->tm_year << 13) + (temp->tm_wday << 10) + (temp->tm_yday << 1) + + temp->tm_isdst; + temp2 ^= clock () ^ temp3; + temp4 = (temp4 * 0xeeee) % 0xffff; + temp2 ^= temp4 << 16; + temp4 = (temp4 * 0xaeee) % 0xffff; temp2 ^= temp4; - temp2 &= 0x7fffffff; - return temp2; } /********************* SIMPLE_MPI ************************/ - - -int * init_rng_simple_mpi(int seed, int mult, int gtype /* = 0 */) +int* init_rng_simple_mpi (int seed, int mult, int gtype /* = 0 */) { - int myid=0, nprocs=1; - Sprng *temp; - - get_proc_info_mpi(&myid,&nprocs); - - temp = SelectType(gtype); - temp->init_rng(myid,nprocs,seed,mult); - - if(temp == NULL) - return NULL; - else { - if(defaultgen != NULL) - defaultgen->free_rng(); + int myid = 0, nprocs = 1; + Sprng *temp; + get_proc_info_mpi (&myid, &nprocs); + temp = SelectType (gtype); + temp->init_rng (myid, nprocs, seed, mult); + if (temp == NULL) + return NULL; + else + { + if (defaultgen != NULL) + defaultgen->free_rng (); defaultgen = temp; + return &junkmpi; /* return "garbage" value */ + } +} - return &junkmpi; /* return "garbage" value */ - } -} - -int get_rn_int_simple_mpi() +int get_rn_int_simple_mpi () { - if(defaultgen == NULL) - if(init_rng_simple_mpi(0,0) == NULL) - return static_cast(-1.0); - - return defaultgen->get_rn_int(); -} + if (defaultgen == NULL) + if (init_rng_simple_mpi (0, 0) == NULL) + return static_cast (-1.0); + return defaultgen->get_rn_int (); +} -float get_rn_flt_simple_mpi() +float get_rn_flt_simple_mpi () { - if(defaultgen == NULL) - if(init_rng_simple_mpi(0,0) == NULL) - return -1.0; - - return defaultgen->get_rn_flt(); -} + if (defaultgen == NULL) + if (init_rng_simple_mpi (0, 0) == NULL) + return -1.0; + return defaultgen->get_rn_flt (); +} -double get_rn_dbl_simple_mpi() +double get_rn_dbl_simple_mpi () { - if(defaultgen == NULL) - if(init_rng_simple_mpi(0,0) == NULL) - return -1.0; - - return defaultgen->get_rn_dbl(); + if (defaultgen == NULL) + if (init_rng_simple_mpi (0, 0) == NULL) + return -1.0; + return defaultgen->get_rn_dbl (); } - #include "fwrap.cpp" - - -/*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ +/*********************************************************************************** + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/SRC/sprng.h sprng5/SRC/sprng.h --- sprng5.orig/SRC/sprng.h 2018-07-21 15:52:36.000000000 +0000 +++ sprng5/SRC/sprng.h 2021-05-18 00:04:03.000000000 +0000 @@ -1,6 +1,5 @@ #ifndef _sprng_h_ #define _sprng_h_ - /* Tests for HAVE_CONFIG_H, which means the configure script has been run properly */ #ifdef HAVE_CONFIG_H /* Including this to use the macros defined during configure script */ @@ -8,14 +7,12 @@ #endif #define DEFAULT_RNG_TYPE SPRNG_LFG - #define SPRNG_LFG 0 #define SPRNG_LCG 1 #define SPRNG_LCG64 2 #define SPRNG_CMRG 3 #define SPRNG_MLFG 4 #define SPRNG_PMLCG 5 - #define SPRNG_DEFAULT 0 #define CRAYLCG 0 #define DRAND48 1 @@ -38,7 +35,6 @@ #define LAG607 8 #define LAG607B 9 #define LAG1279B 10 - #define MAX_PACKED_LENGTH 24000 #ifdef USE_MPI @@ -50,7 +46,6 @@ #define make_sprng_seed MPINAME(make_new_seed) #if defined(SIMPLE_SPRNG) - #define pack_sprng pack_rng_simple #define unpack_sprng unpack_rng_simple #define isprng MPINAME(get_rn_int_simple) @@ -64,7 +59,6 @@ #endif #else - #define free_sprng free_rng #define pack_sprng pack_rng #define unpack_sprng unpack_rng @@ -83,9 +77,11 @@ class Sprng { - public: - - virtual ~Sprng(){}; +public: + virtual ~Sprng () + { + } + ; virtual int init_rng (int, int, int, int) = 0; virtual int get_rn_int () = 0; virtual float get_rn_flt () = 0; @@ -95,13 +91,13 @@ virtual int free_rng () = 0; virtual int pack_rng (char **buffer) = 0; virtual int print_rng () = 0; - virtual int unpack_rng(char *packed) = 0; + virtual int unpack_rng (char *packed) = 0; }; int make_new_seed (); -int *init_rng_simple (int seed, int mult, int gtype = 0); -int *init_rng_simple_mpi (int seed, int mult, int gtype = 0); +int* init_rng_simple (int seed, int mult, int gtype = 0); +int* init_rng_simple_mpi (int seed, int mult, int gtype = 0); int get_rn_int_simple (); int get_rn_int_simple_mpi (); float get_rn_flt_simple (); @@ -109,21 +105,18 @@ double get_rn_dbl_simple (); double get_rn_dbl_simple_mpi (); int pack_rng_simple (char **buffer); -int *unpack_rng_simple (char *packed, int gtype); +int* unpack_rng_simple (char *packed, int gtype); int print_rng_simple (); int make_new_seed_mpi (); - #endif - - /*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/SRC/sprng_cpp.cpp sprng5/SRC/sprng_cpp.cpp --- sprng5.orig/SRC/sprng_cpp.cpp 2014-08-25 17:56:49.000000000 +0000 +++ sprng5/SRC/sprng_cpp.cpp 2021-05-25 14:54:16.000000000 +0000 @@ -1,30 +1,35 @@ #include "sprng_cpp.h" - #include - using namespace std; -Sprng * SelectType(int typenum) +Sprng* SelectType (int typenum) { - switch (typenum) - { - case 0: return new LFG; - case 1: return new LCG; - case 2: return new LCG64; - case 3: return new CMRG; - case 4: return new MLFG; - case 5: return new PMLCG; - default: cerr << "Invalid generator type number.\n"; exit(EXIT_FAILURE); - } + switch (typenum) + { + case 0: + return new LFG; + case 1: + return new LCG; + case 2: + return new LCG64; + case 3: + return new CMRG; + case 4: + return new MLFG; + case 5: + return new PMLCG; + default: + cerr << "Invalid generator type number.\n"; + exit (EXIT_FAILURE); + } } - - -/*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ + +/*********************************************************************************** + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/SRC/sprng_cpp.h sprng5/SRC/sprng_cpp.h --- sprng5.orig/SRC/sprng_cpp.h 2014-08-25 17:56:46.000000000 +0000 +++ sprng5/SRC/sprng_cpp.h 2021-04-29 18:51:32.000000000 +0000 @@ -2,7 +2,7 @@ #define _sprng_cpp_h_ #if __GNUC__ > 3 - #include +#include #endif #include "sprng.h" @@ -13,17 +13,16 @@ #include "mlfg/mlfg.h" #include "pmlcg/pmlcg.h" -Sprng * SelectType(int typenum); +Sprng* SelectType (int typenum); #endif - - -/*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ + +/*********************************************************************************** + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/SRC/sprng_f.h sprng5/SRC/sprng_f.h --- sprng5.orig/SRC/sprng_f.h 2014-08-25 17:56:46.000000000 +0000 +++ sprng5/SRC/sprng_f.h 2021-05-18 00:04:03.000000000 +0000 @@ -30,7 +30,6 @@ #define LAG607 8 #define LAG607B 9 #define LAG1279B 10 - #define MAX_PACKED_LENGTH 24000 #ifdef POINTER_SIZE @@ -138,21 +137,17 @@ #endif - - #ifndef _sprngf_h_ #define _sprngf_h_ #endif - - -/*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ +/*********************************************************************************** +* SPRNG (c) 2014 by Florida State University * +* * +* SPRNG is licensed under a * +* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * +* * +* You should have received a copy of the license along with this * +* work. If not, see . * +************************************************************************************/ diff -urN sprng5.orig/SRC/store.cpp sprng5/SRC/store.cpp --- sprng5.orig/SRC/store.cpp 2014-08-25 17:56:49.000000000 +0000 +++ sprng5/SRC/store.cpp 2021-05-18 00:04:03.000000000 +0000 @@ -1,54 +1,39 @@ #include #include - #include "store.h" - using namespace std; - -int store_long(unsigned long l, int nbytes, unsigned char *c) +int store_long (unsigned long l, int nbytes, unsigned char *c) { int i; - - for(i=0; i>(8*(nbytes-i-1)))&0xff; - - return nbytes; /* return number of chars filled */ + for (i = 0; i < nbytes; i++) + c[i] = (l >> (8 * (nbytes - i - 1))) & 0xff; + return nbytes; /* return number of chars filled */ } - -int store_longarray(unsigned long *l, int n, int nbytes, unsigned char *c) +int store_longarray (unsigned long *l, int n, int nbytes, unsigned char *c) { int i; - - for(i=0; i>(8*(nbytes-i-1)))&0xff; - - return nbytes; /* return number of chars filled */ + return nbytes; /* return number of chars filled */ } - int store_longlongarray(unsigned long long *l, int n, int nbytes, unsigned char *c) { int i; - for(i=0; i>(8*(nbytes-i-1)))&0xff; - - return nbytes; /* return number of chars filled */ + for (i = 0; i < nbytes; i++) + c[i] = (l >> (8 * (nbytes - i - 1))) & 0xff; + return nbytes; /* return number of chars filled */ } - -int store_intarray(unsigned int *l, int n, int nbytes, unsigned char *c) +int store_intarray (unsigned int *l, int n, int nbytes, unsigned char *c) { int i; - - for(i=0; i. * -************************************************************************************/ + +/*********************************************************************************** + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/SRC/store.h sprng5/SRC/store.h --- sprng5.orig/SRC/store.h 2014-08-25 17:56:46.000000000 +0000 +++ sprng5/SRC/store.h 2021-05-18 00:04:03.000000000 +0000 @@ -1,18 +1,17 @@ #ifndef _STORE_H #define _STORE_H - #include "bignum.h" /* Numbers are stored with most significant bit first (left most) */ -int store_long(unsigned long l, int nbytes, unsigned char *c); -int store_longarray(unsigned long *l, int n, int nbytes, unsigned char *c); -int load_long(unsigned char *c, int nbytes, unsigned long *l); -int load_longarray(unsigned char *c, int n, int nbytes, unsigned long *l); -int store_int(unsigned int l, int nbytes, unsigned char *c); -int store_intarray(unsigned int *l, int n, int nbytes, unsigned char *c); -int load_int(unsigned char *c, int nbytes, unsigned int *l); -int load_intarray(unsigned char *c, int n, int nbytes, unsigned int *l); +int store_long (unsigned long l, int nbytes, unsigned char *c); +int store_longarray (unsigned long *l, int n, int nbytes, unsigned char *c); +int load_long (unsigned char *c, int nbytes, unsigned long *l); +int load_longarray (unsigned char *c, int n, int nbytes, unsigned long *l); +int store_int (unsigned int l, int nbytes, unsigned char *c); +int store_intarray (unsigned int *l, int n, int nbytes, unsigned char *c); +int load_int (unsigned char *c, int nbytes, unsigned int *l); +int load_intarray (unsigned char *c, int n, int nbytes, unsigned int *l); #ifdef _LONG_LONG @@ -22,18 +21,14 @@ int load_longlongarray(unsigned char *c, int n, int nbytes, unsigned long long *l); #endif /* _LONG_LONG */ - - #endif /* _STORE_H */ - - -/*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ +/*********************************************************************************** + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/TESTS/Makefile.in sprng5/TESTS/Makefile.in --- sprng5.orig/TESTS/Makefile.in 2018-07-21 19:48:26.000000000 +0000 +++ sprng5/TESTS/Makefile.in 2021-06-08 16:40:20.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -428,6 +428,7 @@ MKDIR_P = @MKDIR_P@ MPICXX = @MPICXX@ MPIF77 = @MPIF77@ +MPI_CXXLIB = @MPI_CXXLIB@ MPI_DEF = @MPI_DEF@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ diff -urN sprng5.orig/TESTS/chisquare.cpp sprng5/TESTS/chisquare.cpp --- sprng5.orig/TESTS/chisquare.cpp 2011-08-06 15:49:00.000000000 +0000 +++ sprng5/TESTS/chisquare.cpp 2021-01-15 16:35:52.000000000 +0000 @@ -1,6 +1,6 @@ /********************************************************** - Chi-Square Probability Function and Kolmogorv-Smirnov -**********************************************************/ + Chi-Square Probability Function and Kolmogorv-Smirnov + **********************************************************/ #include #include @@ -12,11 +12,10 @@ using namespace std; - #define ITMAX 10000000 /* maximum allowed number of iterations */ #define EPS 3.0e-7 /* relative accuracy */ #define FPMIN 1.0e-30 /* number near the smallest */ - /* representable floating-point number */ +/* representable floating-point number */ #ifndef max #define max(a,b) (a(m*Y); - a[k] = min(a[k],Y); - b[k] = max(b[k],Y); - c[k]++; - } - - for(k=j=0, rplus=rminus=0.0; k (m * Y); + a[k] = min(a[k], Y); + b[k] = max(b[k], Y); + c[k]++; + } + + for (k = j = 0, rplus = rminus = 0.0; k < m; k++) + { + if (c[k] <= 0) + continue; + + rminus = max(rminus, a[k] - (double ) j / n); + j += c[k]; + rplus = max(rplus, (double ) j / n - b[k]); + } + + value = sqrt ((double) n) * max(rplus, rminus); #ifdef ONE_SIDED value = sqrt((double) n)*rplus; #endif - delete [] a; - delete [] b; - delete [] c; + delete[] a; + delete[] b; + delete[] c; return value; } -void set_KS_n(long n) +void set_KS_n (long n) { KS_n = n; } -double KSF(double value) +double KSF (double value) { - return KSpercent(value, KS_n); + return KSpercent (value, KS_n); } #ifndef ONE_SIDED -double KSpercent(double value, long n) +double KSpercent (double value, long n) { int i; double mult, temp, term, previous_term, percent; - - value /= sqrt((double) n); - - value *= 0.12 + sqrt((double) n) + 0.11/sqrt((double) n); - + + value /= sqrt ((double) n); + + value *= 0.12 + sqrt ((double) n) + 0.11 / sqrt ((double) n); + mult = 2.0; percent = 0.0; - temp = -2.0*value*value; + temp = -2.0 * value * value; previous_term = 0.0; - - for(i=1; i<150; i++) - { - term = mult*exp(temp*i*i); - percent += term; - if( fabs(term)<0.005*fabs(previous_term) || fabs(term)<0.0000001*percent) - return 1.0 - percent; - - mult = -mult; - previous_term = term; - } - - fprintf(stderr,"WARNING: KSpercent failed to converge\n"); - - return max(percent,0.0); + + for (i = 1; i < 150; i++) + { + term = mult * exp (temp * i * i); + percent += term; + if (fabs (term) < 0.005 * fabs (previous_term) + || fabs (term) < 0.0000001 * percent) + return 1.0 - percent; + + mult = -mult; + previous_term = term; + } + + fprintf (stderr, "WARNING: KSpercent failed to converge\n"); + + return max(percent, 0.0); } #endif - #ifdef ONE_SIDED double KSpercent(double value, long n) { @@ -238,195 +235,192 @@ } #endif -double chisquare(long *actual, double *probability, long n, long k, int *nb) +double chisquare (long *actual, double *probability, long n, long k, int *nb) { double V, prob; long i, n_actual, nbins; - + V = 0.0; - for(i=n_actual=nbins=0, prob=0.0; i=5 || i==k-1) + for (i = n_actual = nbins = 0, prob = 0.0; i < k; i++) { - V += (n_actual-n*prob)*(n_actual-n*prob)/ - (n*prob); - nbins++; - n_actual = 0; - prob = 0.0; + n_actual += actual[i]; + prob += probability[i]; + /*printf("\t %ld. %ld %ld %f %f %ld %ld\n", i, n_actual, actual[i], prob, probability[i], n, nbins); + ch = getchar();*/ + + if (n * prob >= 5 || i == k - 1) + { + V += (n_actual - n * prob) * (n_actual - n * prob) / (n * prob); + nbins++; + n_actual = 0; + prob = 0.0; + } } - } - + *nb = nbins; - - if(nbins == 1) - fprintf(stderr,"WARNING: Only one bin was used in Chisquare\n"); - else if(nbins==0) - fprintf(stderr,"WARNING: No bin was used in Chisquare => n was <= 5.\n"); - else if(nbins != k) - fprintf(stderr,"WARNING: The effective number of bins in Chisquare: %ld, was less than the given number of bins: %ld, due to the effect of combining bins in order to make the expected number of hits per bin sufficiently large.\n", nbins, k); - + + if (nbins == 1) + fprintf (stderr, "WARNING: Only one bin was used in Chisquare\n"); + else if (nbins == 0) + fprintf (stderr, "WARNING: No bin was used in Chisquare => n was <= 5.\n"); + else if (nbins != k) + fprintf ( + stderr, + "WARNING: The effective number of bins in Chisquare: %ld, was less than the given number of bins: %ld, due to the effect of combining bins in order to make the expected number of hits per bin sufficiently large.\n", + nbins, k); + return V; } -void set_d_of_f(long df) +void set_d_of_f (long df) { degrees_of_freedom = df; } - -double chiF(double chiSq) /* returns the chi-square prob. */ -{ - return chipercent(chiSq,degrees_of_freedom); +double chiF (double chiSq) /* returns the chi-square prob. */ +{ + return chipercent (chiSq, degrees_of_freedom); } - -double chipercent(double chiSq, long fr) /* returns the chi-square prob. */ - /* function with chi-square chiSq */ -{ /* & degrees of freedom fr */ - return (gammp(fr/2.0, chiSq/2.0)); +double chipercent (double chiSq, long fr) /* returns the chi-square prob. */ +/* function with chi-square chiSq */ +{ /* & degrees of freedom fr */ + return (gammp (fr / 2.0, chiSq / 2.0)); } - -double gammp(double a, double x) /* returns the incomplete gamma */ - /* function P(a,x) */ +double gammp (double a, double x) /* returns the incomplete gamma */ +/* function P(a,x) */ { - + double gamser, gammcf, gln; - if (x < 0.0 || a <= 0.0) - { - chiGammaFlagError("Invalid arguments in routine gammp"); - return (0.0); - } + if (x < 0.0 || a <= 0.0) + { + chiGammaFlagError ("Invalid arguments in routine gammp"); + return (0.0); + } - if (x < (a + 1.0)) - { /* use the series representation */ - gser(&gamser,a,x,&gln); - return (gamser); - } - else - { /* use the continued fraction */ - gcf(&gammcf,a,x,&gln); /* representation */ - return (1.0 - gammcf); /* and take its complement */ - } + if (x < (a + 1.0)) + { /* use the series representation */ + gser (&gamser, a, x, &gln); + return (gamser); + } + else + { /* use the continued fraction */ + gcf (&gammcf, a, x, &gln); /* representation */ + return (1.0 - gammcf); /* and take its complement */ + } } -void gser(double *gamser, double a, double x, /* Returns the incomplete gamma*/ - double *gln) /* function P(a,x) evaluated by */ -{ /* its series representation as */ - /* gamser. Also returns */ - /* ln(gamma(a)) as gln. */ +void gser (double *gamser, double a, double x, /* Returns the incomplete gamma*/ + double *gln) /* function P(a,x) evaluated by */ +{ /* its series representation as */ + /* gamser. Also returns */ + /* ln(gamma(a)) as gln. */ int n; double sum, del, ap; - *gln=gammln(a); - if (x <= 0.0) - { - if (x < 0.0) - chiGammaFlagError("x less than 0 in routine gser"); - *gamser = 0.0; - return; - } + *gln = gammln (a); + if (x <= 0.0) + { + if (x < 0.0) + chiGammaFlagError ("x less than 0 in routine gser"); + *gamser = 0.0; + return; + } else - { - ap = a; - del = sum = 1.0/a; - for (n=1; n<=ITMAX; n++) { - ++ap; - del *= x/ap; - sum += del; - if (fabs(del) < fabs(sum)*EPS) - { - *gamser = sum * exp(-x + a * log(x) - (*gln)); - return; - } + ap = a; + del = sum = 1.0 / a; + for (n = 1; n <= ITMAX; n++) + { + ++ap; + del *= x / ap; + sum += del; + if (fabs (del) < fabs (sum) * EPS) + { + *gamser = sum * exp (-x + a * log (x) - (*gln)); + return; + } + } + chiGammaFlagError ("a too large, ITMAX too small in routine gser"); + return; } - chiGammaFlagError("a too large, ITMAX too small in routine gser"); - return; - } } -void gcf(double *gammcf, double a, double x, /* Returns the complement */ - double *gln) /* imcomplete gamma function */ -{ /* Q(a,x) evaluated by its */ - /* continued fraction rep. as */ - /* gammcf. Also returns */ - /* ln(gamma(a)) as gln */ +void gcf (double *gammcf, double a, double x, /* Returns the complement */ + double *gln) /* imcomplete gamma function */ +{ /* Q(a,x) evaluated by its */ + /* continued fraction rep. as */ + /* gammcf. Also returns */ + /* ln(gamma(a)) as gln */ int i; double an, b, c, d, del, h; - *gln = gammln(a); + *gln = gammln (a); - b = x + 1.0 - a; /* set up for evaluating */ - c = 1.0 / FPMIN; /* continued fraction by modified*/ - d = 1.0 / b; /* Lentz' method with b0=0 */ + b = x + 1.0 - a; /* set up for evaluating */ + c = 1.0 / FPMIN; /* continued fraction by modified*/ + d = 1.0 / b; /* Lentz' method with b0=0 */ h = d; - for (i=1;i<=ITMAX;i++) - { /* iterate to convergence */ - an = -i * (i - a); - b += 2.0; - d = an * d + b; - if (fabs(d) < FPMIN) d = FPMIN; - c = b + an / c; - if (fabs(c) < FPMIN) c = FPMIN; - d = 1.0 / d; - del = d * c; - h *= del; - if (fabs(del-1.0) < EPS) - break; - } + for (i = 1; i <= ITMAX; i++) + { /* iterate to convergence */ + an = -i * (i - a); + b += 2.0; + d = an * d + b; + if (fabs (d) < FPMIN) + d = FPMIN; + c = b + an / c; + if (fabs (c) < FPMIN) + c = FPMIN; + d = 1.0 / d; + del = d * c; + h *= del; + if (fabs (del - 1.0) < EPS) + break; + } - if (i > ITMAX) - { - chiGammaFlagError("a too large, ITMAX too small in gcf"); - return; - } + if (i > ITMAX) + { + chiGammaFlagError ("a too large, ITMAX too small in gcf"); + return; + } - *gammcf = exp(-x + a * log(x) - (*gln)) * h; /* put factors in front */ + *gammcf = exp (-x + a * log (x) - (*gln)) * h; /* put factors in front */ } - -double gammln(double xx) /* returns the value */ -{ /* ln(gamma(xx)) for xx > 0*/ +double gammln (double xx) /* returns the value */ +{ /* ln(gamma(xx)) for xx > 0*/ double x, y, tmp, ser; - static double cof[6] = { 76.18009172947146, - -86.50532032941677, - 24.01409824083091, - -1.231739572450155, - 0.1208650973866179e-2, - -0.5395239384953e-5}; + static double cof[6] = + { 76.18009172947146, -86.50532032941677, 24.01409824083091, + -1.231739572450155, 0.1208650973866179e-2, -0.5395239384953e-5 }; int j; y = x = xx; tmp = x + 5.5; - tmp -= (x + 0.5) * log(tmp); + tmp -= (x + 0.5) * log (tmp); ser = 1.000000000190015; - for (j=0; j<=5; j++) - ser += cof[j]/++y; + for (j = 0; j <= 5; j++) + ser += cof[j] / ++y; - return (-tmp + log(2.5066282746310005 * ser / x)); + return (-tmp + log (2.5066282746310005 * ser / x)); } -void chiGammaClearErrMess(void) /* clears error message buffer */ +void chiGammaClearErrMess (void) /* clears error message buffer */ { errorMessage = NULL; } -const char *chiGammaReadErrMess(void) /* returns the error message */ -{ /* from the buffer */ +const char* chiGammaReadErrMess (void) /* returns the error message */ +{ /* from the buffer */ return (errorMessage); } -void chiGammaFlagError(const char *errorText) /* writes to the error message */ -{ /* buffer */ +void chiGammaFlagError (const char *errorText) /* writes to the error message */ +{ /* buffer */ errorMessage = errorText; } @@ -481,78 +475,76 @@ } #endif - /* Reference: NIST -- NORCDF available on netlib */ -double cum_normal(double sample, double mean, double stddev) +double cum_normal (double sample, double mean, double stddev) { double a, b, c, d, e, f, g, h, temp; - - a = 0.319381530 ; - b = -0.356563782; - c = 1.781477937; + + a = 0.319381530; + b = -0.356563782; + c = 1.781477937; d = -1.821255978; e = 1.330274429; f = .2316419; - - if(stddev <= 0.0) + + if (stddev <= 0.0) return -1.0; - - sample = (sample - mean)/stddev; - - if(sample < 0.0) + + sample = (sample - mean) / stddev; + + if (sample < 0.0) temp = -sample; else temp = sample; - - g = 1.0/(1.0+f*temp); - h = 1.0 - (0.39894228040143*exp(-0.5*temp*temp)) - *(a*g + b*g*g + c*g*g*g + d*g*g*g*g + e*g*g*g*g*g); - - if(sample < 0.0) - h=1.0-h; + g = 1.0 / (1.0 + f * temp); + h = 1.0 + - (0.39894228040143 * exp (-0.5 * temp * temp)) + * (a * g + b * g * g + c * g * g * g + d * g * g * g * g + + e * g * g * g * g * g); + + if (sample < 0.0) + h = 1.0 - h; + return h; } - static double normal_mu; static double normal_sd; -void set_normal_params(double mu, double sd) +void set_normal_params (double mu, double sd) { normal_mu = mu; normal_sd = sd; } - -double normalF(double x) +double normalF (double x) { - return cum_normal(x,normal_mu,normal_sd); + return cum_normal (x, normal_mu, normal_sd); } - -void mean_sd(double *x, int n, double *mean, double *sd) +void mean_sd (double *x, int n, double *mean, double *sd) { double ave, var, diff, error; int i; - + ave = diff = var = error = 0.0; - - for(i=0; i 31) - { - fprintf(stderr,"ERROR: log(m-d)*log(d) = %d must be less than 32\n", - logmd*logd); - exit(1); - } - if( (1<<(logmd*logd)) < n) - { - fprintf(stderr,"ERROR: m = %d must be at least as high as n = %ld\n", - (1<<(logmd*logd)), n); - exit(1); - } + ntests = init_tests (argc, argv); - if( NTESTS < MIN_CHISQ_NTESTS) + n = atol (argv[N_STREAM_PARAM + 1]); + logmd = atoi (argv[N_STREAM_PARAM + 2]); + logd = atoi (argv[N_STREAM_PARAM + 3]); + + if (logmd * logd > 31) + { + fprintf (stderr, "ERROR: log(m-d)*log(d) = %d must be less than 32\n", + logmd * logd); + exit (1); + } + if ((1 << (logmd * logd)) < n) + { + fprintf (stderr, "ERROR: m = %d must be at least as high as n = %ld\n", + (1 << (logmd * logd)), n); + exit (1); + } + + if (NTESTS < MIN_CHISQ_NTESTS) V = new double[NTESTS]; else - { - bins = new long[n+1]; - memset(bins,0,(n+1)*sizeof(long)); - } - + { + bins = new long[n + 1]; + memset (bins, 0, (n + 1) * sizeof(long)); + } - init_collision(n,logmd,logd); + init_collision (n, logmd, logd); - for(i=0; i 0) + + intsize = sizeof(int) * 8; /*** Assumes 8 bit characters ****/ + m = (1 << (logmd * logd)); + size = m / intsize; + if (m % intsize > 0) size++; - + arraysize = size; theArray = new int[arraysize]; mask = new int[intsize]; - + tempmask = 1; - for(i=0; i=j0; j--) + + for (i = 0; i < n - 1; i++) { - A[j] = (double) j/(double) m *A[j] + - ( (1.0+1.0/(double)m) - (double)j/(double)m )*A[j-1]; - - if( A[j] < 1.0e-20 ) - { - A[j] = 0.0; - if(j == j1) - j1--; - else if(j == j0) - j0++; - } + j1++; + for (j = j1; j >= j0; j--) + { + A[j] = (double) j / (double) m * A[j] + + ((1.0 + 1.0 / (double) m) - (double) j / (double) m) * A[j - 1]; + + if (A[j] < 1.0e-20) + { + A[j] = 0.0; + if (j == j1) + j1--; + else if (j == j0) + j0++; + } + } } - } - - - if(NTESTS < MIN_CHISQ_NTESTS && sqrt((double)NTESTS/(double)(j1-j0+1)) > 0.5) - { - fprintf(stderr,"WARNING: Error in KS estimate may be ~ %f\n", - sqrt((double)NTESTS/(double)(j1-j0+1))); - if(NTESTS*n > 1.0e10) /* We cannot afford to waste large amounts ... */ - { /* ... of computer time */ - fprintf(stderr,"Exiting ... \n"); - exit(-1); + + if (NTESTS < MIN_CHISQ_NTESTS + && sqrt ((double) NTESTS / (double) (j1 - j0 + 1)) > 0.5) + { + fprintf (stderr, "WARNING: Error in KS estimate may be ~ %f\n", + sqrt ((double) NTESTS / (double) (j1 - j0 + 1))); + if (NTESTS * n > 1.0e10) /* We cannot afford to waste large amounts ... */ + { /* ... of computer time */ + fprintf (stderr, "Exiting ... \n"); + exit (-1); + } } - } - - - if(NTESTS < MIN_CHISQ_NTESTS) - { - for(j=j1-1; j>=j0; j--) - A[j] += A[j+1]; - if(A[j0] >= 1.0) - A[j0] = 1.0 - 1.0e-7; /* returning 1.0 confuses the KS test! */ - } - + if (NTESTS < MIN_CHISQ_NTESTS) + { + for (j = j1 - 1; j >= j0; j--) + A[j] += A[j + 1]; + + if (A[j0] >= 1.0) + A[j0] = 1.0 - 1.0e-7; /* returning 1.0 confuses the KS test! */ + } + } -long collision(long n, int logmd, int logd) +long collision (long n, int logmd, int logd) { long m, i, ncollisions; int d, j, index, bit; unsigned int temp, num; - - d = 1<(d*get_rn()); - temp <<= logd; - temp |= num; + temp = 0; + for (j = 0; j < logmd; j++) + { + num = static_cast (d * get_rn ()); + temp <<= logd; + temp |= num; + } + + index = temp / intsize; + bit = temp % intsize; + + if (theArray[index] & mask[bit]) + ncollisions++; + else + theArray[index] |= mask[bit]; } - - index = temp/intsize; - bit = temp%intsize; - - if(theArray[index]&mask[bit]) - ncollisions++; - else - theArray[index] |= mask[bit]; - } - + /*printf("ncollisions = %ld, probability = %f\n", ncollisions, probability[n-ncollisions]);*/ - - return n-ncollisions; + + return n - ncollisions; } diff -urN sprng5.orig/TESTS/communicate.cpp sprng5/TESTS/communicate.cpp --- sprng5.orig/TESTS/communicate.cpp 2006-09-29 20:33:38.000000000 +0000 +++ sprng5/TESTS/communicate.cpp 2021-01-15 16:37:38.000000000 +0000 @@ -16,7 +16,7 @@ { int nprocs, myid, i, nsets; long first, last; - + #ifdef SPRNG_MPI MPI_Status status; @@ -39,11 +39,10 @@ #endif } - -void reduce_sum(double *array,int n) +void reduce_sum (double *array, int n) { double *temp; - + #ifdef SPRNG_MPI temp = new double[n]; @@ -56,10 +55,10 @@ #endif } -void reduce_sum_long(long *array,long n) +void reduce_sum_long (long *array, long n) { long *temp; - + #ifdef SPRNG_MPI temp = new long[n]; @@ -72,4 +71,3 @@ #endif } - diff -urN sprng5.orig/TESTS/coupon.cpp sprng5/TESTS/coupon.cpp --- sprng5.orig/TESTS/coupon.cpp 2008-11-12 16:50:10.000000000 +0000 +++ sprng5/TESTS/coupon.cpp 2021-01-15 16:57:58.000000000 +0000 @@ -1,7 +1,7 @@ #if __GNUC__ > 3 #include #else - #include +#include #endif #include #include @@ -16,64 +16,64 @@ double coupon (long n, int t, int d); double stirling (int n, int m); -int *occurs, Bins_used=0; +int *occurs, Bins_used = 0; long *count; double *probability; - -int main(int argc, char *argv[]) +int main (int argc, char *argv[]) { long ntests, n, i; double *V, result; int t, d; - - if(argc != N_STREAM_PARAM + 4) - { - fprintf(stderr,"USAGE: %s (... %d arguments)\n",argv[0], N_STREAM_PARAM+3); - exit(1); - } - - ntests = init_tests(argc,argv); - V = new double[NTESTS]; - - n = atol(argv[N_STREAM_PARAM+1]); - t = atoi(argv[N_STREAM_PARAM+2]); - d = atoi(argv[N_STREAM_PARAM+3]); - - if(t<=d) - { - fprintf(stderr,"ERROR: t = %d must be greater than d = %d\n", t, d); - exit(1); - } + if (argc != N_STREAM_PARAM + 4) + { + fprintf (stderr, "USAGE: %s (... %d arguments)\n", argv[0], + N_STREAM_PARAM + 3); + exit (1); + } - init_coupon(n,t,d); - - for(i=0; i(i)/ static_cast(d); - - for(r=d; r(d); - } - - prod *= static_cast(d); - probability[t-d] = 1.0 - prod*stirling(t-1,d); - + for (i = 1; i < d; i++) + prod *= static_cast (i) / static_cast (d); + + for (r = d; r < t; r++) + { + probability[r - d] = prod * stirling (r - 1, d - 1); + prod /= static_cast (d); + } + + prod *= static_cast (d); + probability[t - d] = 1.0 - prod * stirling (t - 1, d); + } -double coupon(long n, int t, int d) +double coupon (long n, int t, int d) { int r, q; long s; int temp; double answer; - - memset(count, 0, (t-d+1)*sizeof(long)); - - for(s=0; s= t - d) + count[t - d]++; + else + count[r]++; + } - - if(r >= t-d) - count[t-d]++; - else - count[r]++; - - } - - answer = chisquare(count,probability,n, t-d+1, &Bins_used); - + + answer = chisquare (count, probability, n, t - d + 1, &Bins_used); + /*printf("\tChisquare for stream = %f, %% = %f\n", answer, - chipercent(answer,t-d+1));*/ - + chipercent(answer,t-d+1));*/ + return answer; } diff -urN sprng5.orig/TESTS/equidist.cpp sprng5/TESTS/equidist.cpp --- sprng5.orig/TESTS/equidist.cpp 2011-08-06 15:53:24.000000000 +0000 +++ sprng5/TESTS/equidist.cpp 2021-01-15 16:37:36.000000000 +0000 @@ -1,6 +1,6 @@ /********************************************************************* - Equidistribution Test -*********************************************************************/ + Equidistribution Test + *********************************************************************/ #include #include #include @@ -12,66 +12,71 @@ using namespace std; - /* # of parameters for the test engin */ #define NUM_TEST_ENGIN_PARAM 2 /* # of divisions between [0,1) */ -static long numDiv; +static long numDiv; /* # of random numbers being tested */ -static long numRanNum; +static long numRanNum; /* # of tests repeated */ -static long numRepeat; +static long numRepeat; /* Array of bins */ -static long *bins; +static long *bins; /* Array of corresponding probabilities */ -static double *probs; +static double *probs; /* Array of chi-squares */ -static double *chiSqrs; +static double *chiSqrs; /********************************************************************/ #define FATAL_ABORT printf("Program terminated.\n"); exit(0) /*------------------------------------------------------------------*/ -void initTest(int argc, char *argv[]) { - int numParam=NUM_TEST_ENGIN_PARAM+N_STREAM_PARAM; - long index; - double temp; +void initTest (int argc, char *argv[]) +{ + int numParam = NUM_TEST_ENGIN_PARAM + N_STREAM_PARAM; + long index; + double temp; - /* + /* int ii; for (ii = 0; ii < argc; ii++) - printf("argv[%d] = %s\n", ii, argv[ii]); + printf("argv[%d] = %s\n", ii, argv[ii]); */ - if (argc<(numParam+1)) { - printf("Error: %i number of parameters needed\n", numParam); - FATAL_ABORT; - } + if (argc < (numParam + 1)) + { + printf ("Error: %i number of parameters needed\n", numParam); + FATAL_ABORT + ; + } - numDiv = atol(argv[N_STREAM_PARAM+1]); - numRanNum = atol(argv[N_STREAM_PARAM+2]); + numDiv = atol (argv[N_STREAM_PARAM + 1]); + numRanNum = atol (argv[N_STREAM_PARAM + 2]); - if ((numDiv<=0) || (numRanNum<=0)) { - printf("Error: incorrect parameter value(s)\n"); - FATAL_ABORT; - } - numRepeat = init_tests(argc, argv); + if ((numDiv <= 0) || (numRanNum <= 0)) + { + printf ("Error: incorrect parameter value(s)\n"); + FATAL_ABORT + ; + } + numRepeat = init_tests (argc, argv); - bins = new long int[numDiv]; - probs = new double[numDiv]; - chiSqrs = new double[NTESTS]; + bins = new long int[numDiv]; + probs = new double[numDiv]; + chiSqrs = new double[NTESTS]; - temp = 1.0 / numDiv; + temp = 1.0 / numDiv; - for (index=0;index #include /*#if defined(SPRNG_MPI) -#include "mpi.h" -#endif*/ + #include "mpi.h" + #endif*/ #if defined(SPRNG_MPI) #undef SPRNG_MPI #endif @@ -43,20 +43,17 @@ using namespace std; - -void Analyze(int nstreams, int nruns, int n); +void Analyze (int nstreams, int nruns, int n); void FFTCalc (int nstreams, int nruns, int n); - Sprng **streams; int lda; double *means, *FFTcoeffs; int main (int argc, char *argv[]) { - int i, seed, param, nruns, nstreams, n, *stream, myid=0, nprocs=1; + int i, seed, param, nruns, nstreams, n, *stream, myid = 0, nprocs = 1; - #ifdef SPRNG_MPI MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &myid); @@ -71,53 +68,50 @@ /**************************** Initialization *****************************/ - if(argc != 8 || atoi(argv[2]) != 1 || atoi(argv[6]) != 0) - { - fprintf(stderr,"USAGE: %s nstreams 1 seed param nruns 0 n\n", - argv[0]); - exit(-1); - } - else if(atoi(argv[1]) < 1 || atoi(argv[5]) < 1 || atoi(argv[7]) < 1 ) - { - fprintf(stderr,"ERROR: nstreams, nruns, and n must be > 0\n"); - exit(-1); - } - - nstreams = atoi(argv[1]); /* number of streams */ - param = atoi(argv[4]); /* parameter to the generator */ - nruns = atoi(argv[5]); /* number of runs to repeat */ - n = atoi(argv[7]); /* number of random numbers per stream */ + if (argc != 8 || atoi (argv[2]) != 1 || atoi (argv[6]) != 0) + { + fprintf (stderr, "USAGE: %s nstreams 1 seed param nruns 0 n\n", argv[0]); + exit (-1); + } + else if (atoi (argv[1]) < 1 || atoi (argv[5]) < 1 || atoi (argv[7]) < 1) + { + fprintf (stderr, "ERROR: nstreams, nruns, and n must be > 0\n"); + exit (-1); + } - if(n&1) /* number of rows for Fourier coefficients */ - lda = n+1; + nstreams = atoi (argv[1]); /* number of streams */ + param = atoi (argv[4]); /* parameter to the generator */ + nruns = atoi (argv[5]); /* number of runs to repeat */ + n = atoi (argv[7]); /* number of random numbers per stream */ + + if (n & 1) /* number of rows for Fourier coefficients */ + lda = n + 1; else - lda = n+2; - - FFTcoeffs = new double[lda*nstreams]; /* FFT coeffs */ - means = new double[lda*nstreams]; /* average coeffs */ - streams = new Sprng*[nstreams]; /*random number streams*/ - - for(i=0; i mult*StdDev1) /* Check constant term */ - { - count++; - printf("%d. (0,0) th coefficient exceeds ~ %g th percentile: Expected = %g, observed = %g, StdDev = %g\n\n", count, percentile, mean1, means[0], StdDev1); - } - - for (j=0; j mult * StdDev1) /* Check constant term */ { - if(i==0 && j==0) /* The constant term has already been checked */ - continue; - else + count++; + printf ( + "%d. (0,0) th coefficient exceeds ~ %g th percentile: Expected = %g, observed = %g, StdDev = %g\n\n", + count, percentile, mean1, means[0], StdDev1); + } + + for (j = 0; j < nstreams; j++) /* Check each coefficient */ + for (i = 0; i < lda / 2; i++) { - if(nstreams%2 == 1 || j%(nstreams/2) != 0 || i%(n/2) != 0) - StdDev = StdDev2; + if (i == 0 && j == 0) /* The constant term has already been checked */ + continue; else - StdDev = StdDev1; + { + if (nstreams % 2 == 1 || j % (nstreams / 2) != 0 + || i % (n / 2) != 0) + StdDev = StdDev2; + else + StdDev = StdDev1; + } + + if (fabs (means[2 * i + j * lda] - mean2) > mult * StdDev) /* Real part of coeff. */ + { + count++; + printf ( + "%d. Real part of (%d,%d) th coefficient exceeds ~ %g th percentile: Expected = %g, observed = %g, StdDev = %g\n\n", + count, i, j, percentile, mean2, means[2 * i + j * lda], StdDev); + } + + if (fabs (means[2 * i + j * lda + 1] - mean2) > mult * StdDev) /* Imaginary part */ + { + count++; + printf ( + "%d. Complex part of (%d,%d) th coefficient exceeds ~ %g th percentile: Expected = %g, observed = %g, StdDev = %g\n\n", + count, i, j, percentile, mean2, means[2 * i + j * lda + 1], + StdDev); + } } - - if(fabs(means[2*i+j*lda]-mean2) > mult*StdDev) /* Real part of coeff. */ - { - count++; - printf("%d. Real part of (%d,%d) th coefficient exceeds ~ %g th percentile: Expected = %g, observed = %g, StdDev = %g\n\n", count, i, j, percentile, mean2, means[2*i+j*lda], StdDev); - } - - if(fabs(means[2*i+j*lda+1]-mean2) > mult*StdDev) /* Imaginary part */ - { - count++; - printf("%d. Complex part of (%d,%d) th coefficient exceeds ~ %g th percentile: Expected = %g, observed = %g, StdDev = %g\n\n", count, i, j, percentile, mean2, means[2*i+j*lda+1], StdDev); - } - } - - printf("No other coefficient exceeds %g th percentile\n\n", percentile); - + + printf ("No other coefficient exceeds %g th percentile\n\n", percentile); + return; } - /* Perform FFT on random arrays. Each column is from the same stream. */ /* There are n rows per column, and nstream rows */ -void FFTCalc(int nstreams, int nruns, int n) +void FFTCalc (int nstreams, int nruns, int n) { - int i,j,k; + int i, j, k; double *coeff; - - for(k=0; ksprng(); - - coeff = dzfft2dui (n, nstreams, NULL); /*initialize FFT modules */ - dzfft2du(1,n,nstreams,FFTcoeffs,lda, coeff); /* Compute FFT in place */ - for (i=0; isprng (); + coeff = dzfft2dui (n, nstreams, NULL); /*initialize FFT modules */ + dzfft2du (1, n, nstreams, FFTcoeffs, lda, coeff); /* Compute FFT in place */ + + for (i = 0; i < lda * nstreams; i++) /* Compute mean for each coefficient */ + means[i] += FFTcoeffs[i]; + #ifdef DEBUG /* Check if inverse transform yields original data */ zdfft2du (-1, n, nstreams, FFTcoeffs, lda, coeff); dscal2d(n,nstreams,1.0/(double)(n*nstreams),FFTCoeffs,lda); for(i=0; i<(lda*nstreams); i++) printf("array[%d] = %g\n", i, FFTcoeffs[i]); #endif - } /*end loop for nruns */ + } /*end loop for nruns */ - for (i=0; i #include #include @@ -15,66 +15,73 @@ #define NUM_TEST_ENGIN_PARAM 4 -static int maxGapLen; -static double lowerBound, upperBound; -static long numTotGap; -static int numBin; -static long numRepeat; -static long *bins; -static double *probs; -static double *chiSqrs; +static int maxGapLen; +static double lowerBound, upperBound; +static long numTotGap; +static int numBin; +static long numRepeat; +static long *bins; +static double *probs; +static double *chiSqrs; /********************************************************************/ #define FATAL_ABORT printf("Program terminated.\n"); exit(0) /*------------------------------------------------------------------*/ -void initTest(int argc, char *argv[]) { - int numParam=NUM_TEST_ENGIN_PARAM+N_STREAM_PARAM; - int index; +void initTest (int argc, char *argv[]) +{ + int numParam = NUM_TEST_ENGIN_PARAM + N_STREAM_PARAM; + int index; - if (argc<(numParam+1)) { - printf("Error: %i number of parameters needed\n", numParam); - FATAL_ABORT; - } + if (argc < (numParam + 1)) + { + printf ("Error: %i number of parameters needed\n", numParam); + FATAL_ABORT + ; + } - maxGapLen = atoi(argv[N_STREAM_PARAM+1]); - lowerBound = atof(argv[N_STREAM_PARAM+2]); - upperBound = atof(argv[N_STREAM_PARAM+3]); - numTotGap = atol(argv[N_STREAM_PARAM+4]); + maxGapLen = atoi (argv[N_STREAM_PARAM + 1]); + lowerBound = atof (argv[N_STREAM_PARAM + 2]); + upperBound = atof (argv[N_STREAM_PARAM + 3]); + numTotGap = atol (argv[N_STREAM_PARAM + 4]); - if ((maxGapLen<0) || (lowerBound<0.0) || - (upperBound<=lowerBound) || (1.0 max" cases */ - numBin = maxGapLen + 2; - numRepeat = init_tests(argc, argv); + /* +2 to include "0" & "> max" cases */ + numBin = maxGapLen + 2; + numRepeat = init_tests (argc, argv); - bins = new long int[numBin]; - probs = new double[numBin]; - chiSqrs = new double[NTESTS]; + bins = new long int[numBin]; + probs = new double[numBin]; + chiSqrs = new double[NTESTS]; - probs[0] = upperBound - lowerBound; + probs[0] = upperBound - lowerBound; - for (index=1;index #include -/*#define READ_FROM_STDIN*/ /* read random numbers from stdin */ +/*#define READ_FROM_STDIN*//* read random numbers from stdin */ #ifndef READ_FROM_STDIN #include "../include/sprng_cpp.h" #endif @@ -15,8 +15,8 @@ from the k th stream onwards */ long NTESTS = 0; -int proc_rank=0, init_nprocs=1; -int nsubsequences=0; +int proc_rank = 0, init_nprocs = 1; +int nsubsequences = 0; static int init_seed, init_param, init_total; static int current_subsequence; @@ -29,7 +29,6 @@ void next_stream (void); double get_rn (void); - #ifdef READ_FROM_STDIN /* read random numbers from stdin */ int *init_sprng(int a, int b, int c, int d) @@ -50,7 +49,7 @@ } #endif -long init_tests(int argc, char *argv[]) +long init_tests (int argc, char *argv[]) { long n; @@ -58,60 +57,65 @@ MPI_Init(&argc, &argv); #endif -/*-----------------------------------------------------------------------*/ -/* Changed by Yaohang Li to fit for the new interface */ -/* Adding the rng_type to standard init_sprng interface */ -/* The Number of the arguments increases by 1 */ -/*-----------------------------------------------------------------------*/ - if(argc < 7+1) - { - fprintf(stderr,"Usage: %s n_sets ncombine seed param nsubsequences skip test_arguments\n", - argv[0]); - exit(-1); - } - - if (atoi(argv[1])>5||atoi(argv[1])<0) - { - fprintf(stderr,"Error: First command line argument(random number type) should be between 0 to 5\n"); - exit(-1); - } + /*-----------------------------------------------------------------------*/ + /* Changed by Yaohang Li to fit for the new interface */ + /* Adding the rng_type to standard init_sprng interface */ + /* The Number of the arguments increases by 1 */ + /*-----------------------------------------------------------------------*/ + if (argc < 7 + 1) + { + fprintf ( + stderr, + "Usage: %s n_sets ncombine seed param nsubsequences skip test_arguments\n", + argv[0]); + exit (-1); + } - if(atoi(argv[3]) <= 0) - { - fprintf(stderr,"Error: Third command line argument should be greater than 0\n"); - exit(-1); - } - - if(atoi(argv[6]) <= 0) - { - fprintf(stderr,"Error: Sixth command line argument should be greater than 0\n"); - exit(-1); - } -/*-------------- End by changing ------------------------------*/ - - n = init_streams(argc, argv); - + if (atoi (argv[1]) > 5 || atoi (argv[1]) < 0) + { + fprintf ( + stderr, + "Error: First command line argument(random number type) should be between 0 to 5\n"); + exit (-1); + } + + if (atoi (argv[3]) <= 0) + { + fprintf (stderr, + "Error: Third command line argument should be greater than 0\n"); + exit (-1); + } + + if (atoi (argv[6]) <= 0) + { + fprintf (stderr, + "Error: Sixth command line argument should be greater than 0\n"); + exit (-1); + } + /*-------------- End by changing ------------------------------*/ + + n = init_streams (argc, argv); + return n; } - -long init_streams(int argc, char *argv[]) +long init_streams (int argc, char *argv[]) { -/*------------------------------------------------------------*/ -/* Modify by Yaohang Li */ -/* Adding rng_type as a new argument */ -/*------------------------------------------------------------*/ + /*------------------------------------------------------------*/ + /* Modify by Yaohang Li */ + /* Adding rng_type as a new argument */ + /*------------------------------------------------------------*/ int seed, param, n, i; int myid = 0, nprocs = 1; - - rng_type = atoi(argv[1]); /*--- Get the rand type by reading the 1 arg ---*/ - n = atoi(argv[2]); - n_combine = atoi(argv[3]); - seed = atoi(argv[4]); - param = atoi(argv[5]); - nsubsequences = atoi(argv[6]); - skip = atoi(argv[7]); - + + rng_type = atoi (argv[1]); /*--- Get the rand type by reading the 1 arg ---*/ + n = atoi (argv[2]); + n_combine = atoi (argv[3]); + seed = atoi (argv[4]); + param = atoi (argv[5]); + nsubsequences = atoi (argv[6]); + skip = atoi (argv[7]); + #ifdef SPRNG_MPI MPI_Comm_rank(MPI_COMM_WORLD, &myid); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); @@ -119,77 +123,82 @@ init_nprocs = nprocs; #endif - if(proc_rank == 0) - { - for(i=0; iinit_sprng(n_combine*current_group+i+OFFSET,n_combine*n+OFFSET,seed,init_param); - } - - init_ngroups = n*(myid+1)/nprocs - n*myid/nprocs; - - return init_ngroups*nsubsequences; + gens = new Sprng*[n_combine]; + + for (i = 0; i < n_combine; i++) + { + gens[i] = SelectType (rng_type); + gens[i]->init_sprng (n_combine * current_group + i + OFFSET, + n_combine * n + OFFSET, seed, init_param); + } + + init_ngroups = n * (myid + 1) / nprocs - n * myid / nprocs; + + return init_ngroups * nsubsequences; } -void next_stream(void) +void next_stream (void) { int i; double temp; - - current_subsequence = (current_subsequence + 1)%nsubsequences; - - if(current_subsequence > 0) - for(i=0; i 0) + for (i = 0; i < skip; i++) + { + temp = get_rn (); + } + else { - temp = get_rn(); + current_group++; + current_gen = 0; + + for (i = 0; i < n_combine; i++) + gens[i]->free_sprng (); + + if (current_group > first_group + && current_group < first_group + init_ngroups) + for (i = 0; i < n_combine; i++) + { + gens[i] = SelectType (rng_type); + gens[i]->init_sprng (n_combine * current_group + i + OFFSET, + n_combine * init_total + OFFSET, init_seed, + init_param); + } + else if (current_group > first_group + && current_group > first_group + init_ngroups) + printf ("ERROR: current_pair = %ld not in allowed range [%d,%ld]\n", + current_group, 0, init_ngroups - 1); + } - else - { - current_group++; - current_gen = 0; - - for(i=0; ifree_sprng(); - if(current_group > first_group && current_group < first_group+init_ngroups) - for(i=0; iinit_sprng(n_combine*current_group+i+OFFSET,n_combine*init_total+OFFSET,init_seed, init_param); - } - else if(current_group > first_group && current_group > - first_group+init_ngroups) - printf("ERROR: current_pair = %ld not in allowed range [%d,%ld]\n", - current_group,0,init_ngroups-1 ); - - } - } -double get_rn(void) +double get_rn (void) { double temp; - - temp = gens[current_gen]->sprng(); - current_gen = (current_gen+1)%n_combine; - + + temp = gens[current_gen]->sprng (); + current_gen = (current_gen + 1) % n_combine; + return temp; } - #if 0 int main(int argc, char *argv[]) diff -urN sprng5.orig/TESTS/maxt.cpp sprng5/TESTS/maxt.cpp --- sprng5.orig/TESTS/maxt.cpp 2006-09-30 00:51:36.000000000 +0000 +++ sprng5/TESTS/maxt.cpp 2021-01-15 16:59:48.000000000 +0000 @@ -16,49 +16,48 @@ int xt_t = 1; - -int main(int argc, char *argv[]) +int main (int argc, char *argv[]) { long ntests, n, i; double *V, result; int t; - - if(argc != N_STREAM_PARAM + 3) - { - fprintf(stderr,"USAGE: %s (... %d arguments)\n",argv[0], N_STREAM_PARAM+2); - exit(1); - } - - ntests = init_tests(argc,argv); - - n = atol(argv[N_STREAM_PARAM+1]); - t = atoi(argv[N_STREAM_PARAM+2]); - + + if (argc != N_STREAM_PARAM + 3) + { + fprintf (stderr, "USAGE: %s (... %d arguments)\n", argv[0], + N_STREAM_PARAM + 2); + exit (1); + } + + ntests = init_tests (argc, argv); + + n = atol (argv[N_STREAM_PARAM + 1]); + t = atoi (argv[N_STREAM_PARAM + 2]); + V = new double[NTESTS]; V2 = new double[n]; - - for(i=0; i V[i]) - V[i] = temp; + V[i] = 0.0; + for (j = 0; j < t; j++) + { + temp = get_rn (); + + if (temp > V[i]) + V[i] = temp; + } } - } - - set_t(t); - temp = KS(V,n,xt); + + set_t (t); + temp = KS (V, n, xt); /*printf("\tKS for stream = %f, %% = %f\n", temp, KSpercent(temp,n));*/ - + /*delete [] V;*/ - + return temp; } diff -urN sprng5.orig/TESTS/metropolis.cpp sprng5/TESTS/metropolis.cpp --- sprng5.orig/TESTS/metropolis.cpp 2011-08-05 19:50:40.000000000 +0000 +++ sprng5/TESTS/metropolis.cpp 2021-01-15 16:37:37.000000000 +0000 @@ -15,379 +15,374 @@ #define SYNC int lattice_size, *spin, nsites; -Sprng **genptr; /* array of random number generators */ +Sprng **genptr; /* array of random number generators */ int exponent, mask; /* Used for efficiency purposes */ double prob; -double Energy[10][10], Cv[10][10], J=0.4406868; +double Energy[10][10], Cv[10][10], J = 0.4406868; double expJarray[17], *expJ; -double exact_energy=-1.4530649029, exact_Cv=1.4987048885; /***** This is correct ONLY for a 16x16 lattice!!****** */ +double exact_energy = -1.4530649029, exact_Cv = 1.4987048885; /***** This is correct ONLY for a 16x16 lattice!!****** */ -int RNG() /* Random number generator used for initializations alone */ +int RNG () /* Random number generator used for initializations alone */ { - static int seed=17; - seed=16807*(seed%127773)-(seed/127773)*2836; - if(seed<0) - seed+=2147483647; - else if(seed > 2147483647) - { - seed--; - seed -= 2147483647; - } - + static int seed = 17; + seed = 16807 * (seed % 127773) - (seed / 127773) * 2836; + if (seed < 0) + seed += 2147483647; + else if (seed > 2147483647) + { + seed--; + seed -= 2147483647; + } + return seed; } - int neighbor[4]; -int diff(int Ispin) +int diff (int Ispin) { - int i, s=0; + int i, s = 0; - if(Ispin>0) - for(i=0; i<4; i++) s+=neighbor[i]; + if (Ispin > 0) + for (i = 0; i < 4; i++) + s += neighbor[i]; else - for(i=0; i<4; i++) s-=neighbor[i]; - return s<<1; + for (i = 0; i < 4; i++) + s -= neighbor[i]; + return s << 1; } -int energy_difference(int site) +int energy_difference (int site) { int diffE; int ix, iy; - ix=site>>exponent; iy=site&mask; + ix = site >> exponent; + iy = site & mask; - if(iy==0) - neighbor[0]=spin[site+lattice_size-1]; - else - neighbor[0]=spin[site-1]; + if (iy == 0) + neighbor[0] = spin[site + lattice_size - 1]; + else + neighbor[0] = spin[site - 1]; - if(iy==lattice_size-1) - neighbor[2]=spin[ix*lattice_size]; - else - neighbor[2]=spin[site+1]; + if (iy == lattice_size - 1) + neighbor[2] = spin[ix * lattice_size]; + else + neighbor[2] = spin[site + 1]; - if(ix==0) - neighbor[1]=spin[lattice_size*(lattice_size-1)+iy]; - else - neighbor[1]=spin[site-lattice_size]; + if (ix == 0) + neighbor[1] = spin[lattice_size * (lattice_size - 1) + iy]; + else + neighbor[1] = spin[site - lattice_size]; - if(ix==lattice_size-1) - neighbor[3]=spin[iy]; - else - neighbor[3]=spin[site+lattice_size]; + if (ix == lattice_size - 1) + neighbor[3] = spin[iy]; + else + neighbor[3] = spin[site + lattice_size]; - diffE=diff(spin[site]); + diffE = diff (spin[site]); return diffE; } - -int System_Energy() /* Compute energy of lattice */ +int System_Energy () /* Compute energy of lattice */ { - int E =0; + int E = 0; int i, j, s; - for(i=0, s=0; igenptr[k]->sprng()){ + if (expJ[dE] > genptr[k]->sprng ()) + { #else if(dE<=0 || expJ[dE]>genptr[k]->sprng()){ #endif - energy += dE; - spin[k] = -spin[k]; + energy += dE; + spin[k] = -spin[k]; + } + } + average_E += energy; + average_Cv += energy * energy; } - } - average_E += energy; - average_Cv += energy*energy; - } - average_E /= (double) block_size*nsites; /*compute average of quantities */ - average_Cv /= (double) block_size; + average_E /= (double) block_size * nsites; /*compute average of quantities */ + average_Cv /= (double) block_size; - if(i>=10*divisor) /* make scale logarithmic for printing results */ - { - divisor *= 10; - row++; - } - - col = i/divisor; - average_E /= divisor; - average_Cv /= divisor; - Energy[row][col] += average_E; - Cv[row][col] += average_Cv; + if (i >= 10 * divisor) /* make scale logarithmic for printing results */ + { + divisor *= 10; + row++; + } - for(k=row+1; k<10; k++) - { - average_E /= 10; - average_Cv /= 10; - Energy[k][0] += average_E; - Cv[k][0] += average_Cv; + col = i / divisor; + average_E /= divisor; + average_Cv /= divisor; + Energy[row][col] += average_E; + Cv[row][col] += average_Cv; + + for (k = row + 1; k < 10; k++) + { + average_E /= 10; + average_Cv /= 10; + Energy[k][0] += average_E; + Cv[k][0] += average_Cv; + } + + if (old_row != row) + { + compute (old_row); + old_row = row; + } } - - if(old_row != row) - { - compute(old_row); - old_row = row; - } - } - compute(old_row); + compute (old_row); } /*--- adding rng_type as a parameter ---*/ -void minitialize(int rng_type, int seed, int param, int use_blocks) +void minitialize (int rng_type, int seed, int param, int use_blocks) { int i, j, temp; - - expJ = expJarray+8; - for(i=-8; i<9; i++) - expJ[i] = exp(-J*i); - - nsites = lattice_size*lattice_size; - prob = 1 - exp(-2.0*J); - for(i=0; i<10; i++) - for(j=0; j<10; j++) + expJ = expJarray + 8; + for (i = -8; i < 9; i++) + expJ[i] = exp (-J * i); + + nsites = lattice_size * lattice_size; + prob = 1 - exp (-2.0 * J); + + for (i = 0; i < 10; i++) + for (j = 0; j < 10; j++) Energy[i][j] = Cv[i][j] = 0.0; - - spin = static_cast(malloc(nsites*sizeof(int))); - if(!spin) - { - printf("\n\tMemory allocation failure, program exits!\n"); - exit(-1); - } + spin = static_cast (malloc (nsites * sizeof(int))); + if (!spin) + { + printf ("\n\tMemory allocation failure, program exits!\n"); + exit (-1); + } - - for(i=0; iprob)?1:-1; + for (i = 0; i < nsites; i++) /* randomly initialize system */ + spin[i] = (RNG () > prob) ? 1 : -1; /* here assume that expo is integer exponent of 2 */ - temp = mask=lattice_size-1; - exponent = 0; /* expo = log_2(lattice_size) */ - while(temp) - { - exponent++; - temp >>= 1; - } - + temp = mask = lattice_size - 1; + exponent = 0; /* expo = log_2(lattice_size) */ + while (temp) + { + exponent++; + temp >>= 1; + } + /* initialize generator */ - genptr = (Sprng **) malloc(nsites*sizeof(Sprng *)); - genptr[0] = SelectType(rng_type); - genptr[0]->init_sprng(0,nsites,seed,param); /*--- add rng_type ---*/ - genptr[0]->print_sprng(); + genptr = (Sprng**) malloc (nsites * sizeof(Sprng*)); + genptr[0] = SelectType (rng_type); + genptr[0]->init_sprng (0, nsites, seed, param); /*--- add rng_type ---*/ + genptr[0]->print_sprng (); - for(i=1; iinit_sprng(i,nsites,seed,param); /*--- add rng_type ---*/ + genptr[i] = SelectType (rng_type); + genptr[i]->init_sprng (i, nsites, seed, param); /*--- add rng_type ---*/ } #else genptr[i]=genptr[0]; #endif } - -void check_arguments(int lattice_size, int block_size, int discard_blocks, - int use_blocks) +void check_arguments (int lattice_size, int block_size, int discard_blocks, + int use_blocks) { - if(lattice_size<=0) - { - printf("ERROR: lattice_size %d should be > 0\n", lattice_size); - exit(-1); - } - if(block_size<=0) - { - printf("ERROR: Block_size %d should be > 0\n", block_size); - exit(-1); - } - if(discard_blocks<0) - { - printf("ERROR: discard_blocks %d should be >= 0\n", discard_blocks); - exit(-1); - } - if(use_blocks<=0) - { - printf("ERROR: use_blocks %d should be > 0\n", use_blocks); - exit(-1); - } - if((lattice_size&(lattice_size-1)) != 0) /* check if lattice_size = 2^n */ - { - printf("ERROR: lattice_size %d should be a positive power of 2\n", - lattice_size); - exit(-1); - } - if(lattice_size!=16) - { - printf("WARNING: The current code gives error values correctly only for a 16x16 lattice.\n\t... The Energy_error and Cv_error columns are incorrect.\n\t... Please use the Energy and Cv values and compute error from the exact solution.\n"); - } - while(use_blocks) /* check if use_blocks is a power of 10 */ - { - if(use_blocks%10 != 0 && use_blocks!=1) + if (lattice_size <= 0) { - printf("ERROR: use_blocks %d should be a power of 10\n", use_blocks); - exit(-1); + printf ("ERROR: lattice_size %d should be > 0\n", lattice_size); + exit (-1); } - use_blocks /= 10; - } + if (block_size <= 0) + { + printf ("ERROR: Block_size %d should be > 0\n", block_size); + exit (-1); + } + if (discard_blocks < 0) + { + printf ("ERROR: discard_blocks %d should be >= 0\n", discard_blocks); + exit (-1); + } + if (use_blocks <= 0) + { + printf ("ERROR: use_blocks %d should be > 0\n", use_blocks); + exit (-1); + } + if ((lattice_size & (lattice_size - 1)) != 0) /* check if lattice_size = 2^n */ + { + printf ("ERROR: lattice_size %d should be a positive power of 2\n", + lattice_size); + exit (-1); + } + if (lattice_size != 16) + { + printf ( + "WARNING: The current code gives error values correctly only for a 16x16 lattice.\n\t... The Energy_error and Cv_error columns are incorrect.\n\t... Please use the Energy and Cv values and compute error from the exact solution.\n"); + } + while (use_blocks) /* check if use_blocks is a power of 10 */ + { + if (use_blocks % 10 != 0 && use_blocks != 1) + { + printf ("ERROR: use_blocks %d should be a power of 10\n", use_blocks); + exit (-1); + } + use_blocks /= 10; + } } - - - /************** 'Thermalize' system so that results are not influenced - by the initial conditions *************/ -void thermalize(int block_size, int discard_blocks) +/************** 'Thermalize' system so that results are not influenced + by the initial conditions *************/ +void thermalize (int block_size, int discard_blocks) { int i, j, k, dE; - - for(i=0; igenptr[k]->sprng()) + if (expJ[dE] > genptr[k]->sprng ()) #else if(dE<=0 || expJ[dE]>genptr[k]->sprng()) #endif - { - spin[k] = -spin[k]; + { + spin[k] = -spin[k]; + } } - } } - - - /* block_size*use_blocks sweeps through a lattice of size -lattice_size*lattice_size using the Metropolis algorithm for the Ising model */ + lattice_size*lattice_size using the Metropolis algorithm for the Ising model */ -int main(int argc, char **argv) +int main (int argc, char **argv) { /*--- Add rng_time as the 1st argument ---*/ int rng_type; int seed, param, block_size, discard_blocks, use_blocks; - + /****************** Read and check Arguments ********************/ - if(argc==8 ) /*--- increase # of arguments by 1 ---*/ - { - argv++; - rng_type = atoi(*argv++); /*--- get rng_type ---*/ - seed = atoi(*argv++); - param = atoi(*argv++); - lattice_size = atoi(*argv++); - block_size = atoi(*argv++); - discard_blocks = atoi(*argv++); - use_blocks = atoi(*argv++); - check_arguments(lattice_size, block_size, discard_blocks, use_blocks); + if (argc == 8) /*--- increase # of arguments by 1 ---*/ + { + argv++; + rng_type = atoi (*argv++); /*--- get rng_type ---*/ + seed = atoi (*argv++); + param = atoi (*argv++); + lattice_size = atoi (*argv++); + block_size = atoi (*argv++); + discard_blocks = atoi (*argv++); + use_blocks = atoi (*argv++); + check_arguments (lattice_size, block_size, discard_blocks, use_blocks); #ifdef PARALLEL - printf("Metropolis Algorithm with Parallel RNG\n"); + printf ("Metropolis Algorithm with Parallel RNG\n"); #else printf("Metropolis Algorithm with Serial RNG\n"); #endif - printf("lattice_size = %d, block_size = %d, discard_blocks = %d, use_blocks = %d\n", lattice_size, block_size, discard_blocks, use_blocks); - } + printf ( + "lattice_size = %d, block_size = %d, discard_blocks = %d, use_blocks = %d\n", + lattice_size, block_size, discard_blocks, use_blocks); + } else - { - printf("USAGE: %d \n", argc); - printf("USAGE: %s rndtype seed param lattice_size block_size discard_blocks use_blocks\n", argv[0]); - exit(-1); - } + { + printf ("USAGE: %d \n", argc); + printf ( + "USAGE: %s rndtype seed param lattice_size block_size discard_blocks use_blocks\n", + argv[0]); + exit (-1); + } /*--- add rng_type as the 1st parameter ---*/ /*--- in order not to duplicate initialize() ---*/ /*--- change to be minitialize() ---*/ - minitialize(rng_type, seed, param, use_blocks); /* initalize data */ - + minitialize (rng_type, seed, param, use_blocks); /* initalize data */ /************** 'Thermalize' system so that results are not influenced - by the initial conditions *************/ - thermalize(block_size, discard_blocks); - + by the initial conditions *************/ + thermalize (block_size, discard_blocks); + /********** Perform the actual Metropolis algorithm calculations *********/ - metropolis(block_size, use_blocks); + metropolis (block_size, use_blocks); return 0; } diff -urN sprng5.orig/TESTS/mpitests/Makefile.in sprng5/TESTS/mpitests/Makefile.in --- sprng5.orig/TESTS/mpitests/Makefile.in 2018-07-21 19:48:26.000000000 +0000 +++ sprng5/TESTS/mpitests/Makefile.in 2021-06-08 16:40:21.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -408,6 +408,7 @@ MKDIR_P = @MKDIR_P@ MPICXX = @MPICXX@ MPIF77 = @MPIF77@ +MPI_CXXLIB = @MPI_CXXLIB@ MPI_DEF = @MPI_DEF@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ diff -urN sprng5.orig/TESTS/mpitests/chisquare.cpp sprng5/TESTS/mpitests/chisquare.cpp --- sprng5.orig/TESTS/mpitests/chisquare.cpp 2011-08-06 15:49:40.000000000 +0000 +++ sprng5/TESTS/mpitests/chisquare.cpp 2021-01-15 16:35:53.000000000 +0000 @@ -1,6 +1,6 @@ /********************************************************** - Chi-Square Probability Function and Kolmogorv-Smirnov -**********************************************************/ + Chi-Square Probability Function and Kolmogorv-Smirnov + **********************************************************/ #include #include @@ -16,11 +16,10 @@ using namespace std; - #define ITMAX 10000000 /* maximum allowed number of iterations */ #define EPS 3.0e-7 /* relative accuracy */ #define FPMIN 1.0e-30 /* number near the smallest */ - /* representable floating-point number */ +/* representable floating-point number */ #ifndef max #define max(a,b) (a(m*Y); - a[k] = min(a[k],Y); - b[k] = max(b[k],Y); - c[k]++; - } - - for(k=j=0, rplus=rminus=0.0; k (m * Y); + a[k] = min(a[k], Y); + b[k] = max(b[k], Y); + c[k]++; + } + + for (k = j = 0, rplus = rminus = 0.0; k < m; k++) + { + if (c[k] <= 0) + continue; + + rminus = max(rminus, a[k] - (double ) j / n); + j += c[k]; + rplus = max(rplus, (double ) j / n - b[k]); + } + + value = sqrt ((double) n) * max(rplus, rminus); #ifdef ONE_SIDED value = sqrt((double) n)*rplus; #endif - delete [] a; - delete [] b; - delete [] c; + delete[] a; + delete[] b; + delete[] c; return value; } -void set_KS_n(long n) +void set_KS_n (long n) { KS_n = n; } -double KSF(double value) +double KSF (double value) { - return KSpercent(value, KS_n); + return KSpercent (value, KS_n); } #ifndef ONE_SIDED -double KSpercent(double value, long n) +double KSpercent (double value, long n) { int i; double mult, temp, term, previous_term, percent; - - value /= sqrt((double) n); - - value *= 0.12 + sqrt((double) n) + 0.11/sqrt((double) n); - + + value /= sqrt ((double) n); + + value *= 0.12 + sqrt ((double) n) + 0.11 / sqrt ((double) n); + mult = 2.0; percent = 0.0; - temp = -2.0*value*value; + temp = -2.0 * value * value; previous_term = 0.0; - - for(i=1; i<150; i++) - { - term = mult*exp(temp*i*i); - percent += term; - if( fabs(term)<0.005*fabs(previous_term) || fabs(term)<0.0000001*percent) - return 1.0 - percent; - - mult = -mult; - previous_term = term; - } - - fprintf(stderr,"WARNING: KSpercent failed to converge\n"); - - return max(percent,0.0); + + for (i = 1; i < 150; i++) + { + term = mult * exp (temp * i * i); + percent += term; + if (fabs (term) < 0.005 * fabs (previous_term) + || fabs (term) < 0.0000001 * percent) + return 1.0 - percent; + + mult = -mult; + previous_term = term; + } + + fprintf (stderr, "WARNING: KSpercent failed to converge\n"); + + return max(percent, 0.0); } #endif - #ifdef ONE_SIDED double KSpercent(double value, long n) { @@ -242,195 +239,192 @@ } #endif -double chisquare(long *actual, double *probability, long n, long k, int *nb) +double chisquare (long *actual, double *probability, long n, long k, int *nb) { double V, prob; long i, n_actual, nbins; - + V = 0.0; - for(i=n_actual=nbins=0, prob=0.0; i=5 || i==k-1) + for (i = n_actual = nbins = 0, prob = 0.0; i < k; i++) { - V += (n_actual-n*prob)*(n_actual-n*prob)/ - (n*prob); - nbins++; - n_actual = 0; - prob = 0.0; + n_actual += actual[i]; + prob += probability[i]; + /*printf("\t %ld. %ld %ld %f %f %ld %ld\n", i, n_actual, actual[i], prob, probability[i], n, nbins); + ch = getchar();*/ + + if (n * prob >= 5 || i == k - 1) + { + V += (n_actual - n * prob) * (n_actual - n * prob) / (n * prob); + nbins++; + n_actual = 0; + prob = 0.0; + } } - } - + *nb = nbins; - - if(nbins == 1) - fprintf(stderr,"WARNING: Only one bin was used in Chisquare\n"); - else if(nbins==0) - fprintf(stderr,"WARNING: No bin was used in Chisquare => n was <= 5.\n"); - else if(nbins != k) - fprintf(stderr,"WARNING: The effective number of bins in Chisquare: %ld, was less than the given number of bins: %ld, due to the effect of combining bins in order to make the expected number of hits per bin sufficiently large.\n", nbins, k); - + + if (nbins == 1) + fprintf (stderr, "WARNING: Only one bin was used in Chisquare\n"); + else if (nbins == 0) + fprintf (stderr, "WARNING: No bin was used in Chisquare => n was <= 5.\n"); + else if (nbins != k) + fprintf ( + stderr, + "WARNING: The effective number of bins in Chisquare: %ld, was less than the given number of bins: %ld, due to the effect of combining bins in order to make the expected number of hits per bin sufficiently large.\n", + nbins, k); + return V; } -void set_d_of_f(long df) +void set_d_of_f (long df) { degrees_of_freedom = df; } - -double chiF(double chiSq) /* returns the chi-square prob. */ -{ - return chipercent(chiSq,degrees_of_freedom); +double chiF (double chiSq) /* returns the chi-square prob. */ +{ + return chipercent (chiSq, degrees_of_freedom); } - -double chipercent(double chiSq, long fr) /* returns the chi-square prob. */ - /* function with chi-square chiSq */ -{ /* & degrees of freedom fr */ - return (gammp(fr/2.0, chiSq/2.0)); +double chipercent (double chiSq, long fr) /* returns the chi-square prob. */ +/* function with chi-square chiSq */ +{ /* & degrees of freedom fr */ + return (gammp (fr / 2.0, chiSq / 2.0)); } - -double gammp(double a, double x) /* returns the incomplete gamma */ - /* function P(a,x) */ +double gammp (double a, double x) /* returns the incomplete gamma */ +/* function P(a,x) */ { - + double gamser, gammcf, gln; - if (x < 0.0 || a <= 0.0) - { - chiGammaFlagError("Invalid arguments in routine gammp"); - return (0.0); - } + if (x < 0.0 || a <= 0.0) + { + chiGammaFlagError ("Invalid arguments in routine gammp"); + return (0.0); + } - if (x < (a + 1.0)) - { /* use the series representation */ - gser(&gamser,a,x,&gln); - return (gamser); - } - else - { /* use the continued fraction */ - gcf(&gammcf,a,x,&gln); /* representation */ - return (1.0 - gammcf); /* and take its complement */ - } + if (x < (a + 1.0)) + { /* use the series representation */ + gser (&gamser, a, x, &gln); + return (gamser); + } + else + { /* use the continued fraction */ + gcf (&gammcf, a, x, &gln); /* representation */ + return (1.0 - gammcf); /* and take its complement */ + } } -void gser(double *gamser, double a, double x, /* Returns the incomplete gamma*/ - double *gln) /* function P(a,x) evaluated by */ -{ /* its series representation as */ - /* gamser. Also returns */ - /* ln(gamma(a)) as gln. */ +void gser (double *gamser, double a, double x, /* Returns the incomplete gamma*/ + double *gln) /* function P(a,x) evaluated by */ +{ /* its series representation as */ + /* gamser. Also returns */ + /* ln(gamma(a)) as gln. */ int n; double sum, del, ap; - *gln=gammln(a); - if (x <= 0.0) - { - if (x < 0.0) - chiGammaFlagError("x less than 0 in routine gser"); - *gamser = 0.0; - return; - } + *gln = gammln (a); + if (x <= 0.0) + { + if (x < 0.0) + chiGammaFlagError ("x less than 0 in routine gser"); + *gamser = 0.0; + return; + } else - { - ap = a; - del = sum = 1.0/a; - for (n=1; n<=ITMAX; n++) { - ++ap; - del *= x/ap; - sum += del; - if (fabs(del) < fabs(sum)*EPS) - { - *gamser = sum * exp(-x + a * log(x) - (*gln)); - return; - } + ap = a; + del = sum = 1.0 / a; + for (n = 1; n <= ITMAX; n++) + { + ++ap; + del *= x / ap; + sum += del; + if (fabs (del) < fabs (sum) * EPS) + { + *gamser = sum * exp (-x + a * log (x) - (*gln)); + return; + } + } + chiGammaFlagError ("a too large, ITMAX too small in routine gser"); + return; } - chiGammaFlagError("a too large, ITMAX too small in routine gser"); - return; - } } -void gcf(double *gammcf, double a, double x, /* Returns the complement */ - double *gln) /* imcomplete gamma function */ -{ /* Q(a,x) evaluated by its */ - /* continued fraction rep. as */ - /* gammcf. Also returns */ - /* ln(gamma(a)) as gln */ +void gcf (double *gammcf, double a, double x, /* Returns the complement */ + double *gln) /* imcomplete gamma function */ +{ /* Q(a,x) evaluated by its */ + /* continued fraction rep. as */ + /* gammcf. Also returns */ + /* ln(gamma(a)) as gln */ int i; double an, b, c, d, del, h; - *gln = gammln(a); + *gln = gammln (a); - b = x + 1.0 - a; /* set up for evaluating */ - c = 1.0 / FPMIN; /* continued fraction by modified*/ - d = 1.0 / b; /* Lentz' method with b0=0 */ + b = x + 1.0 - a; /* set up for evaluating */ + c = 1.0 / FPMIN; /* continued fraction by modified*/ + d = 1.0 / b; /* Lentz' method with b0=0 */ h = d; - for (i=1;i<=ITMAX;i++) - { /* iterate to convergence */ - an = -i * (i - a); - b += 2.0; - d = an * d + b; - if (fabs(d) < FPMIN) d = FPMIN; - c = b + an / c; - if (fabs(c) < FPMIN) c = FPMIN; - d = 1.0 / d; - del = d * c; - h *= del; - if (fabs(del-1.0) < EPS) - break; - } + for (i = 1; i <= ITMAX; i++) + { /* iterate to convergence */ + an = -i * (i - a); + b += 2.0; + d = an * d + b; + if (fabs (d) < FPMIN) + d = FPMIN; + c = b + an / c; + if (fabs (c) < FPMIN) + c = FPMIN; + d = 1.0 / d; + del = d * c; + h *= del; + if (fabs (del - 1.0) < EPS) + break; + } - if (i > ITMAX) - { - chiGammaFlagError("a too large, ITMAX too small in gcf"); - return; - } + if (i > ITMAX) + { + chiGammaFlagError ("a too large, ITMAX too small in gcf"); + return; + } - *gammcf = exp(-x + a * log(x) - (*gln)) * h; /* put factors in front */ + *gammcf = exp (-x + a * log (x) - (*gln)) * h; /* put factors in front */ } - -double gammln(double xx) /* returns the value */ -{ /* ln(gamma(xx)) for xx > 0*/ +double gammln (double xx) /* returns the value */ +{ /* ln(gamma(xx)) for xx > 0*/ double x, y, tmp, ser; - static double cof[6] = { 76.18009172947146, - -86.50532032941677, - 24.01409824083091, - -1.231739572450155, - 0.1208650973866179e-2, - -0.5395239384953e-5}; + static double cof[6] = + { 76.18009172947146, -86.50532032941677, 24.01409824083091, + -1.231739572450155, 0.1208650973866179e-2, -0.5395239384953e-5 }; int j; y = x = xx; tmp = x + 5.5; - tmp -= (x + 0.5) * log(tmp); + tmp -= (x + 0.5) * log (tmp); ser = 1.000000000190015; - for (j=0; j<=5; j++) - ser += cof[j]/++y; + for (j = 0; j <= 5; j++) + ser += cof[j] / ++y; - return (-tmp + log(2.5066282746310005 * ser / x)); + return (-tmp + log (2.5066282746310005 * ser / x)); } -void chiGammaClearErrMess(void) /* clears error message buffer */ +void chiGammaClearErrMess (void) /* clears error message buffer */ { errorMessage = NULL; } -const char *chiGammaReadErrMess(void) /* returns the error message */ -{ /* from the buffer */ +const char* chiGammaReadErrMess (void) /* returns the error message */ +{ /* from the buffer */ return (errorMessage); } -void chiGammaFlagError(const char *errorText) /* writes to the error message */ -{ /* buffer */ +void chiGammaFlagError (const char *errorText) /* writes to the error message */ +{ /* buffer */ errorMessage = errorText; } @@ -485,78 +479,76 @@ } #endif - /* Reference: NIST -- NORCDF available on netlib */ -double cum_normal(double sample, double mean, double stddev) +double cum_normal (double sample, double mean, double stddev) { double a, b, c, d, e, f, g, h, temp; - - a = 0.319381530 ; - b = -0.356563782; - c = 1.781477937; + + a = 0.319381530; + b = -0.356563782; + c = 1.781477937; d = -1.821255978; e = 1.330274429; f = .2316419; - - if(stddev <= 0.0) + + if (stddev <= 0.0) return -1.0; - - sample = (sample - mean)/stddev; - - if(sample < 0.0) + + sample = (sample - mean) / stddev; + + if (sample < 0.0) temp = -sample; else temp = sample; - - g = 1.0/(1.0+f*temp); - h = 1.0 - (0.39894228040143*exp(-0.5*temp*temp)) - *(a*g + b*g*g + c*g*g*g + d*g*g*g*g + e*g*g*g*g*g); - - if(sample < 0.0) - h=1.0-h; + g = 1.0 / (1.0 + f * temp); + h = 1.0 + - (0.39894228040143 * exp (-0.5 * temp * temp)) + * (a * g + b * g * g + c * g * g * g + d * g * g * g * g + + e * g * g * g * g * g); + + if (sample < 0.0) + h = 1.0 - h; + return h; } - static double normal_mu; static double normal_sd; -void set_normal_params(double mu, double sd) +void set_normal_params (double mu, double sd) { normal_mu = mu; normal_sd = sd; } - -double normalF(double x) +double normalF (double x) { - return cum_normal(x,normal_mu,normal_sd); + return cum_normal (x, normal_mu, normal_sd); } - -void mean_sd(double *x, int n, double *mean, double *sd) +void mean_sd (double *x, int n, double *mean, double *sd) { double ave, var, diff, error; int i; - + ave = diff = var = error = 0.0; - for(i=0; i 31) - { - fprintf(stderr,"ERROR: log(m-d)*log(d) = %d must be less than 32\n", - logmd*logd); - exit(1); - } - if( (1<<(logmd*logd)) < n) - { - fprintf(stderr,"ERROR: m = %d must be at least as high as n = %ld\n", - (1<<(logmd*logd)), n); - exit(1); - } + ntests = init_tests (argc, argv); - if( NTESTS < MIN_CHISQ_NTESTS) + n = atol (argv[N_STREAM_PARAM + 1]); + logmd = atoi (argv[N_STREAM_PARAM + 2]); + logd = atoi (argv[N_STREAM_PARAM + 3]); + + if (logmd * logd > 31) + { + fprintf (stderr, "ERROR: log(m-d)*log(d) = %d must be less than 32\n", + logmd * logd); + exit (1); + } + if ((1 << (logmd * logd)) < n) + { + fprintf (stderr, "ERROR: m = %d must be at least as high as n = %ld\n", + (1 << (logmd * logd)), n); + exit (1); + } + + if (NTESTS < MIN_CHISQ_NTESTS) V = new double[NTESTS]; else - { - bins = new long[n+1]; - memset(bins,0,(n+1)*sizeof(long)); - } - + { + bins = new long[n + 1]; + memset (bins, 0, (n + 1) * sizeof(long)); + } - init_collision(n,logmd,logd); + init_collision (n, logmd, logd); - for(i=0; i 0) + + intsize = sizeof(int) * 8; /*** Assumes 8 bit characters ****/ + m = (1 << (logmd * logd)); + size = m / intsize; + if (m % intsize > 0) size++; - + arraysize = size; theArray = new int[arraysize]; mask = new int[intsize]; - + tempmask = 1; - for(i=0; i=j0; j--) + + for (i = 0; i < n - 1; i++) { - A[j] = (double) j/(double) m *A[j] + - ( (1.0+1.0/(double)m) - (double)j/(double)m )*A[j-1]; - - if( A[j] < 1.0e-20 ) - { - A[j] = 0.0; - if(j == j1) - j1--; - else if(j == j0) - j0++; - } + j1++; + for (j = j1; j >= j0; j--) + { + A[j] = (double) j / (double) m * A[j] + + ((1.0 + 1.0 / (double) m) - (double) j / (double) m) * A[j - 1]; + + if (A[j] < 1.0e-20) + { + A[j] = 0.0; + if (j == j1) + j1--; + else if (j == j0) + j0++; + } + } } - } - - - if(NTESTS < MIN_CHISQ_NTESTS && sqrt((double)NTESTS/(double)(j1-j0+1)) > 0.5) - { - fprintf(stderr,"WARNING: Error in KS estimate may be ~ %f\n", - sqrt((double)NTESTS/(double)(j1-j0+1))); - if(NTESTS*n > 1.0e10) /* We cannot afford to waste large amounts ... */ - { /* ... of computer time */ - fprintf(stderr,"Exiting ... \n"); - exit(-1); + + if (NTESTS < MIN_CHISQ_NTESTS + && sqrt ((double) NTESTS / (double) (j1 - j0 + 1)) > 0.5) + { + fprintf (stderr, "WARNING: Error in KS estimate may be ~ %f\n", + sqrt ((double) NTESTS / (double) (j1 - j0 + 1))); + if (NTESTS * n > 1.0e10) /* We cannot afford to waste large amounts ... */ + { /* ... of computer time */ + fprintf (stderr, "Exiting ... \n"); + exit (-1); + } } - } - - - if(NTESTS < MIN_CHISQ_NTESTS) - { - for(j=j1-1; j>=j0; j--) - A[j] += A[j+1]; - if(A[j0] >= 1.0) - A[j0] = 1.0 - 1.0e-7; /* returning 1.0 confuses the KS test! */ - } - + if (NTESTS < MIN_CHISQ_NTESTS) + { + for (j = j1 - 1; j >= j0; j--) + A[j] += A[j + 1]; + + if (A[j0] >= 1.0) + A[j0] = 1.0 - 1.0e-7; /* returning 1.0 confuses the KS test! */ + } + } -long collision(long n, int logmd, int logd) +long collision (long n, int logmd, int logd) { long m, i, ncollisions; int d, j, index, bit; unsigned int temp, num; - - d = 1<(d*get_rn()); - temp <<= logd; - temp |= num; + temp = 0; + for (j = 0; j < logmd; j++) + { + num = static_cast (d * get_rn ()); + temp <<= logd; + temp |= num; + } + + index = temp / intsize; + bit = temp % intsize; + + if (theArray[index] & mask[bit]) + ncollisions++; + else + theArray[index] |= mask[bit]; } - - index = temp/intsize; - bit = temp%intsize; - - if(theArray[index]&mask[bit]) - ncollisions++; - else - theArray[index] |= mask[bit]; - } - + /*printf("ncollisions = %ld, probability = %f\n", ncollisions, probability[n-ncollisions]);*/ - - return n-ncollisions; + + return n - ncollisions; } diff -urN sprng5.orig/TESTS/mpitests/communicate.cpp sprng5/TESTS/mpitests/communicate.cpp --- sprng5.orig/TESTS/mpitests/communicate.cpp 2007-04-17 16:27:04.000000000 +0000 +++ sprng5/TESTS/mpitests/communicate.cpp 2021-01-15 16:37:37.000000000 +0000 @@ -16,7 +16,7 @@ { int nprocs, myid, i, nsets; long first, last; - + #ifdef SPRNG_MPI MPI_Status status; @@ -39,11 +39,10 @@ #endif } - -void reduce_sum(double *array,int n) +void reduce_sum (double *array, int n) { double *temp; - + #ifdef SPRNG_MPI temp = new double[n]; @@ -56,10 +55,10 @@ #endif } -void reduce_sum_long(long *array,long n) +void reduce_sum_long (long *array, long n) { long *temp; - + #ifdef SPRNG_MPI temp = new long[n]; @@ -72,4 +71,3 @@ #endif } - diff -urN sprng5.orig/TESTS/mpitests/coupon.cpp sprng5/TESTS/mpitests/coupon.cpp --- sprng5.orig/TESTS/mpitests/coupon.cpp 2010-07-07 19:28:58.000000000 +0000 +++ sprng5/TESTS/mpitests/coupon.cpp 2021-01-15 16:59:46.000000000 +0000 @@ -12,64 +12,64 @@ double coupon (long n, int t, int d); double stirling (int n, int m); -int *occurs, Bins_used=0; +int *occurs, Bins_used = 0; long *count; double *probability; - -int main(int argc, char *argv[]) +int main (int argc, char *argv[]) { long ntests, n, i; double *V, result; int t, d; - - if(argc != N_STREAM_PARAM + 4) - { - fprintf(stderr,"USAGE: %s (... %d arguments)\n",argv[0], N_STREAM_PARAM+3); - exit(1); - } - - ntests = init_tests(argc,argv); - V = new double[NTESTS]; - - n = atol(argv[N_STREAM_PARAM+1]); - t = atoi(argv[N_STREAM_PARAM+2]); - d = atoi(argv[N_STREAM_PARAM+3]); - - if(t<=d) - { - fprintf(stderr,"ERROR: t = %d must be greater than d = %d\n", t, d); - exit(1); - } + if (argc != N_STREAM_PARAM + 4) + { + fprintf (stderr, "USAGE: %s (... %d arguments)\n", argv[0], + N_STREAM_PARAM + 3); + exit (1); + } - init_coupon(n,t,d); - - for(i=0; i(i)/ static_cast(d); - - for(r=d; r(d); - } - - prod *= static_cast(d); - probability[t-d] = 1.0 - prod*stirling(t-1,d); - + for (i = 1; i < d; i++) + prod *= static_cast (i) / static_cast (d); + + for (r = d; r < t; r++) + { + probability[r - d] = prod * stirling (r - 1, d - 1); + prod /= static_cast (d); + } + + prod *= static_cast (d); + probability[t - d] = 1.0 - prod * stirling (t - 1, d); + } -double coupon(long n, int t, int d) +double coupon (long n, int t, int d) { int r, q; long s; int temp; double answer; - - memset(count, 0, (t-d+1)*sizeof(long)); - - for(s=0; s= t - d) + count[t - d]++; + else + count[r]++; + } - - if(r >= t-d) - count[t-d]++; - else - count[r]++; - - } - - answer = chisquare(count,probability,n, t-d+1, &Bins_used); - + + answer = chisquare (count, probability, n, t - d + 1, &Bins_used); + /*printf("\tChisquare for stream = %f, %% = %f\n", answer, - chipercent(answer,t-d+1));*/ - + chipercent(answer,t-d+1));*/ + return answer; } diff -urN sprng5.orig/TESTS/mpitests/equidist.cpp sprng5/TESTS/mpitests/equidist.cpp --- sprng5.orig/TESTS/mpitests/equidist.cpp 2011-08-06 15:53:20.000000000 +0000 +++ sprng5/TESTS/mpitests/equidist.cpp 2021-01-15 16:37:38.000000000 +0000 @@ -1,6 +1,6 @@ /********************************************************************* - Equidistribution Test -*********************************************************************/ + Equidistribution Test + *********************************************************************/ #include #include #include @@ -12,66 +12,71 @@ using namespace std; - /* # of parameters for the test engin */ #define NUM_TEST_ENGIN_PARAM 2 /* # of divisions between [0,1) */ -static long numDiv; +static long numDiv; /* # of random numbers being tested */ -static long numRanNum; +static long numRanNum; /* # of tests repeated */ -static long numRepeat; +static long numRepeat; /* Array of bins */ -static long *bins; +static long *bins; /* Array of corresponding probabilities */ -static double *probs; +static double *probs; /* Array of chi-squares */ -static double *chiSqrs; +static double *chiSqrs; /********************************************************************/ #define FATAL_ABORT printf("Program terminated.\n"); exit(0) /*------------------------------------------------------------------*/ -void initTest(int argc, char *argv[]) { - int numParam=NUM_TEST_ENGIN_PARAM+N_STREAM_PARAM; - long index; - double temp; +void initTest (int argc, char *argv[]) +{ + int numParam = NUM_TEST_ENGIN_PARAM + N_STREAM_PARAM; + long index; + double temp; - /* + /* int ii; for (ii = 0; ii < argc; ii++) - printf("argv[%d] = %s\n", ii, argv[ii]); + printf("argv[%d] = %s\n", ii, argv[ii]); */ - if (argc<(numParam+1)) { - printf("Error: %i number of parameters needed\n", numParam); - FATAL_ABORT; - } + if (argc < (numParam + 1)) + { + printf ("Error: %i number of parameters needed\n", numParam); + FATAL_ABORT + ; + } - numDiv = atol(argv[N_STREAM_PARAM+1]); - numRanNum = atol(argv[N_STREAM_PARAM+2]); + numDiv = atol (argv[N_STREAM_PARAM + 1]); + numRanNum = atol (argv[N_STREAM_PARAM + 2]); - if ((numDiv<=0) || (numRanNum<=0)) { - printf("Error: incorrect parameter value(s)\n"); - FATAL_ABORT; - } - numRepeat = init_tests(argc, argv); + if ((numDiv <= 0) || (numRanNum <= 0)) + { + printf ("Error: incorrect parameter value(s)\n"); + FATAL_ABORT + ; + } + numRepeat = init_tests (argc, argv); - bins = new long int[numDiv]; - probs = new double[numDiv]; - chiSqrs = new double[NTESTS]; + bins = new long int[numDiv]; + probs = new double[numDiv]; + chiSqrs = new double[NTESTS]; - temp = 1.0 / numDiv; + temp = 1.0 / numDiv; - for (index=0;index #include /*#if defined(SPRNG_MPI) -#include "mpi.h" -#endif*/ + #include "mpi.h" + #endif*/ #if defined(SPRNG_MPI) #undef SPRNG_MPI #endif @@ -43,20 +43,17 @@ using namespace std; - -void Analyze(int nstreams, int nruns, int n); +void Analyze (int nstreams, int nruns, int n); void FFTCalc (int nstreams, int nruns, int n); - Sprng **streams; int lda; double *means, *FFTcoeffs; int main (int argc, char *argv[]) { - int i, seed, param, nruns, nstreams, n, *stream, myid=0, nprocs=1; + int i, seed, param, nruns, nstreams, n, *stream, myid = 0, nprocs = 1; - #ifdef SPRNG_MPI MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &myid); @@ -71,53 +68,50 @@ /**************************** Initialization *****************************/ - if(argc != 8 || atoi(argv[2]) != 1 || atoi(argv[6]) != 0) - { - fprintf(stderr,"USAGE: %s nstreams 1 seed param nruns 0 n\n", - argv[0]); - exit(-1); - } - else if(atoi(argv[1]) < 1 || atoi(argv[5]) < 1 || atoi(argv[7]) < 1 ) - { - fprintf(stderr,"ERROR: nstreams, nruns, and n must be > 0\n"); - exit(-1); - } - - nstreams = atoi(argv[1]); /* number of streams */ - param = atoi(argv[4]); /* parameter to the generator */ - nruns = atoi(argv[5]); /* number of runs to repeat */ - n = atoi(argv[7]); /* number of random numbers per stream */ + if (argc != 8 || atoi (argv[2]) != 1 || atoi (argv[6]) != 0) + { + fprintf (stderr, "USAGE: %s nstreams 1 seed param nruns 0 n\n", argv[0]); + exit (-1); + } + else if (atoi (argv[1]) < 1 || atoi (argv[5]) < 1 || atoi (argv[7]) < 1) + { + fprintf (stderr, "ERROR: nstreams, nruns, and n must be > 0\n"); + exit (-1); + } - if(n&1) /* number of rows for Fourier coefficients */ - lda = n+1; + nstreams = atoi (argv[1]); /* number of streams */ + param = atoi (argv[4]); /* parameter to the generator */ + nruns = atoi (argv[5]); /* number of runs to repeat */ + n = atoi (argv[7]); /* number of random numbers per stream */ + + if (n & 1) /* number of rows for Fourier coefficients */ + lda = n + 1; else - lda = n+2; - - FFTcoeffs = new double[lda*nstreams]; /* FFT coeffs */ - means = new double[lda*nstreams]; /* average coeffs */ - streams = new Sprng*[nstreams]; /*random number streams*/ - - for(i=0; i mult*StdDev1) /* Check constant term */ - { - count++; - printf("%d. (0,0) th coefficient exceeds ~ %g th percentile: Expected = %g, observed = %g, StdDev = %g\n\n", count, percentile, mean1, means[0], StdDev1); - } - - for (j=0; j mult * StdDev1) /* Check constant term */ { - if(i==0 && j==0) /* The constant term has already been checked */ - continue; - else + count++; + printf ( + "%d. (0,0) th coefficient exceeds ~ %g th percentile: Expected = %g, observed = %g, StdDev = %g\n\n", + count, percentile, mean1, means[0], StdDev1); + } + + for (j = 0; j < nstreams; j++) /* Check each coefficient */ + for (i = 0; i < lda / 2; i++) { - if(nstreams%2 == 1 || j%(nstreams/2) != 0 || i%(n/2) != 0) - StdDev = StdDev2; + if (i == 0 && j == 0) /* The constant term has already been checked */ + continue; else - StdDev = StdDev1; + { + if (nstreams % 2 == 1 || j % (nstreams / 2) != 0 + || i % (n / 2) != 0) + StdDev = StdDev2; + else + StdDev = StdDev1; + } + + if (fabs (means[2 * i + j * lda] - mean2) > mult * StdDev) /* Real part of coeff. */ + { + count++; + printf ( + "%d. Real part of (%d,%d) th coefficient exceeds ~ %g th percentile: Expected = %g, observed = %g, StdDev = %g\n\n", + count, i, j, percentile, mean2, means[2 * i + j * lda], StdDev); + } + + if (fabs (means[2 * i + j * lda + 1] - mean2) > mult * StdDev) /* Imaginary part */ + { + count++; + printf ( + "%d. Complex part of (%d,%d) th coefficient exceeds ~ %g th percentile: Expected = %g, observed = %g, StdDev = %g\n\n", + count, i, j, percentile, mean2, means[2 * i + j * lda + 1], + StdDev); + } } - - if(fabs(means[2*i+j*lda]-mean2) > mult*StdDev) /* Real part of coeff. */ - { - count++; - printf("%d. Real part of (%d,%d) th coefficient exceeds ~ %g th percentile: Expected = %g, observed = %g, StdDev = %g\n\n", count, i, j, percentile, mean2, means[2*i+j*lda], StdDev); - } - - if(fabs(means[2*i+j*lda+1]-mean2) > mult*StdDev) /* Imaginary part */ - { - count++; - printf("%d. Complex part of (%d,%d) th coefficient exceeds ~ %g th percentile: Expected = %g, observed = %g, StdDev = %g\n\n", count, i, j, percentile, mean2, means[2*i+j*lda+1], StdDev); - } - } - - printf("No other coefficient exceeds %g th percentile\n\n", percentile); - + + printf ("No other coefficient exceeds %g th percentile\n\n", percentile); + return; } - /* Perform FFT on random arrays. Each column is from the same stream. */ /* There are n rows per column, and nstream rows */ -void FFTCalc(int nstreams, int nruns, int n) +void FFTCalc (int nstreams, int nruns, int n) { - int i,j,k; + int i, j, k; double *coeff; - - for(k=0; ksprng(); - - coeff = dzfft2dui (n, nstreams, NULL); /*initialize FFT modules */ - dzfft2du(1,n,nstreams,FFTcoeffs,lda, coeff); /* Compute FFT in place */ - for (i=0; isprng (); + coeff = dzfft2dui (n, nstreams, NULL); /*initialize FFT modules */ + dzfft2du (1, n, nstreams, FFTcoeffs, lda, coeff); /* Compute FFT in place */ + + for (i = 0; i < lda * nstreams; i++) /* Compute mean for each coefficient */ + means[i] += FFTcoeffs[i]; + #ifdef DEBUG /* Check if inverse transform yields original data */ zdfft2du (-1, n, nstreams, FFTcoeffs, lda, coeff); dscal2d(n,nstreams,1.0/(double)(n*nstreams),FFTCoeffs,lda); for(i=0; i<(lda*nstreams); i++) printf("array[%d] = %g\n", i, FFTcoeffs[i]); #endif - } /*end loop for nruns */ + } /*end loop for nruns */ - for (i=0; i #include #include @@ -15,66 +15,73 @@ #define NUM_TEST_ENGIN_PARAM 4 -static int maxGapLen; -static double lowerBound, upperBound; -static long numTotGap; -static int numBin; -static long numRepeat; -static long *bins; -static double *probs; -static double *chiSqrs; +static int maxGapLen; +static double lowerBound, upperBound; +static long numTotGap; +static int numBin; +static long numRepeat; +static long *bins; +static double *probs; +static double *chiSqrs; /********************************************************************/ #define FATAL_ABORT printf("Program terminated.\n"); exit(0) /*------------------------------------------------------------------*/ -void initTest(int argc, char *argv[]) { - int numParam=NUM_TEST_ENGIN_PARAM+N_STREAM_PARAM; - int index; +void initTest (int argc, char *argv[]) +{ + int numParam = NUM_TEST_ENGIN_PARAM + N_STREAM_PARAM; + int index; - if (argc<(numParam+1)) { - printf("Error: %i number of parameters needed\n", numParam); - FATAL_ABORT; - } + if (argc < (numParam + 1)) + { + printf ("Error: %i number of parameters needed\n", numParam); + FATAL_ABORT + ; + } - maxGapLen = atoi(argv[N_STREAM_PARAM+1]); - lowerBound = atof(argv[N_STREAM_PARAM+2]); - upperBound = atof(argv[N_STREAM_PARAM+3]); - numTotGap = atol(argv[N_STREAM_PARAM+4]); + maxGapLen = atoi (argv[N_STREAM_PARAM + 1]); + lowerBound = atof (argv[N_STREAM_PARAM + 2]); + upperBound = atof (argv[N_STREAM_PARAM + 3]); + numTotGap = atol (argv[N_STREAM_PARAM + 4]); - if ((maxGapLen<0) || (lowerBound<0.0) || - (upperBound<=lowerBound) || (1.0 max" cases */ - numBin = maxGapLen + 2; - numRepeat = init_tests(argc, argv); + /* +2 to include "0" & "> max" cases */ + numBin = maxGapLen + 2; + numRepeat = init_tests (argc, argv); - bins = new long int[numBin]; - probs = new double[numBin]; - chiSqrs = new double[NTESTS]; + bins = new long int[numBin]; + probs = new double[numBin]; + chiSqrs = new double[NTESTS]; - probs[0] = upperBound - lowerBound; + probs[0] = upperBound - lowerBound; - for (index=1;index #include -/*#define READ_FROM_STDIN*/ /* read random numbers from stdin */ +/*#define READ_FROM_STDIN*//* read random numbers from stdin */ #ifndef READ_FROM_STDIN #include "../include/sprng_cpp.h" #endif @@ -15,8 +15,8 @@ from the k th stream onwards */ long NTESTS = 0; -int proc_rank=0, init_nprocs=1; -int nsubsequences=0; +int proc_rank = 0, init_nprocs = 1; +int nsubsequences = 0; static int init_seed, init_param, init_total; static int current_subsequence; @@ -29,7 +29,6 @@ void next_stream (void); double get_rn (void); - #ifdef READ_FROM_STDIN /* read random numbers from stdin */ int *init_sprng(int a, int b, int c, int d) @@ -50,7 +49,7 @@ } #endif -long init_tests(int argc, char *argv[]) +long init_tests (int argc, char *argv[]) { long n; @@ -58,60 +57,65 @@ MPI_Init(&argc, &argv); #endif -/*-----------------------------------------------------------------------*/ -/* Changed by Yaohang Li to fit for the new interface */ -/* Adding the rng_type to standard init_sprng interface */ -/* The Number of the arguments increases by 1 */ -/*-----------------------------------------------------------------------*/ - if(argc < 7+1) - { - fprintf(stderr,"Usage: %s n_sets ncombine seed param nsubsequences skip test_arguments\n", - argv[0]); - exit(-1); - } - - if (atoi(argv[1])>5||atoi(argv[1])<0) - { - fprintf(stderr,"Error: First command line argument(random number type) should be between 0 to 5\n"); - exit(-1); - } + /*-----------------------------------------------------------------------*/ + /* Changed by Yaohang Li to fit for the new interface */ + /* Adding the rng_type to standard init_sprng interface */ + /* The Number of the arguments increases by 1 */ + /*-----------------------------------------------------------------------*/ + if (argc < 7 + 1) + { + fprintf ( + stderr, + "Usage: %s n_sets ncombine seed param nsubsequences skip test_arguments\n", + argv[0]); + exit (-1); + } - if(atoi(argv[3]) <= 0) - { - fprintf(stderr,"Error: Third command line argument should be greater than 0\n"); - exit(-1); - } - - if(atoi(argv[6]) <= 0) - { - fprintf(stderr,"Error: Sixth command line argument should be greater than 0\n"); - exit(-1); - } -/*-------------- End by changing ------------------------------*/ - - n = init_streams(argc, argv); - + if (atoi (argv[1]) > 5 || atoi (argv[1]) < 0) + { + fprintf ( + stderr, + "Error: First command line argument(random number type) should be between 0 to 5\n"); + exit (-1); + } + + if (atoi (argv[3]) <= 0) + { + fprintf (stderr, + "Error: Third command line argument should be greater than 0\n"); + exit (-1); + } + + if (atoi (argv[6]) <= 0) + { + fprintf (stderr, + "Error: Sixth command line argument should be greater than 0\n"); + exit (-1); + } + /*-------------- End by changing ------------------------------*/ + + n = init_streams (argc, argv); + return n; } - -long init_streams(int argc, char *argv[]) +long init_streams (int argc, char *argv[]) { -/*------------------------------------------------------------*/ -/* Modify by Yaohang Li */ -/* Adding rng_type as a new argument */ -/*------------------------------------------------------------*/ + /*------------------------------------------------------------*/ + /* Modify by Yaohang Li */ + /* Adding rng_type as a new argument */ + /*------------------------------------------------------------*/ int seed, param, n, i; int myid = 0, nprocs = 1; - - rng_type = atoi(argv[1]); /*--- Get the rand type by reading the 1 arg ---*/ - n = atoi(argv[2]); - n_combine = atoi(argv[3]); - seed = atoi(argv[4]); - param = atoi(argv[5]); - nsubsequences = atoi(argv[6]); - skip = atoi(argv[7]); - + + rng_type = atoi (argv[1]); /*--- Get the rand type by reading the 1 arg ---*/ + n = atoi (argv[2]); + n_combine = atoi (argv[3]); + seed = atoi (argv[4]); + param = atoi (argv[5]); + nsubsequences = atoi (argv[6]); + skip = atoi (argv[7]); + #ifdef SPRNG_MPI MPI_Comm_rank(MPI_COMM_WORLD, &myid); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); @@ -119,77 +123,82 @@ init_nprocs = nprocs; #endif - if(proc_rank == 0) - { - for(i=0; iinit_sprng(n_combine*current_group+i+OFFSET,n_combine*n+OFFSET,seed,init_param); - } - - init_ngroups = n*(myid+1)/nprocs - n*myid/nprocs; - - return init_ngroups*nsubsequences; + gens = new Sprng*[n_combine]; + + for (i = 0; i < n_combine; i++) + { + gens[i] = SelectType (rng_type); + gens[i]->init_sprng (n_combine * current_group + i + OFFSET, + n_combine * n + OFFSET, seed, init_param); + } + + init_ngroups = n * (myid + 1) / nprocs - n * myid / nprocs; + + return init_ngroups * nsubsequences; } -void next_stream(void) +void next_stream (void) { int i; double temp; - - current_subsequence = (current_subsequence + 1)%nsubsequences; - - if(current_subsequence > 0) - for(i=0; i 0) + for (i = 0; i < skip; i++) + { + temp = get_rn (); + } + else { - temp = get_rn(); + current_group++; + current_gen = 0; + + for (i = 0; i < n_combine; i++) + gens[i]->free_sprng (); + + if (current_group > first_group + && current_group < first_group + init_ngroups) + for (i = 0; i < n_combine; i++) + { + gens[i] = SelectType (rng_type); + gens[i]->init_sprng (n_combine * current_group + i + OFFSET, + n_combine * init_total + OFFSET, init_seed, + init_param); + } + else if (current_group > first_group + && current_group > first_group + init_ngroups) + printf ("ERROR: current_pair = %ld not in allowed range [%d,%ld]\n", + current_group, 0, init_ngroups - 1); + } - else - { - current_group++; - current_gen = 0; - - for(i=0; ifree_sprng(); - if(current_group > first_group && current_group < first_group+init_ngroups) - for(i=0; iinit_sprng(n_combine*current_group+i+OFFSET,n_combine*init_total+OFFSET,init_seed, init_param); - } - else if(current_group > first_group && current_group > - first_group+init_ngroups) - printf("ERROR: current_pair = %ld not in allowed range [%d,%ld]\n", - current_group,0,init_ngroups-1 ); - - } - } -double get_rn(void) +double get_rn (void) { double temp; - - temp = gens[current_gen]->sprng(); - current_gen = (current_gen+1)%n_combine; - + + temp = gens[current_gen]->sprng (); + current_gen = (current_gen + 1) % n_combine; + return temp; } - #if 0 int main(int argc, char *argv[]) diff -urN sprng5.orig/TESTS/mpitests/maxt.cpp sprng5/TESTS/mpitests/maxt.cpp --- sprng5.orig/TESTS/mpitests/maxt.cpp 2007-04-17 16:27:04.000000000 +0000 +++ sprng5/TESTS/mpitests/maxt.cpp 2021-01-15 16:59:48.000000000 +0000 @@ -16,49 +16,48 @@ int xt_t = 1; - -int main(int argc, char *argv[]) +int main (int argc, char *argv[]) { long ntests, n, i; double *V, result; int t; - - if(argc != N_STREAM_PARAM + 3) - { - fprintf(stderr,"USAGE: %s (... %d arguments)\n",argv[0], N_STREAM_PARAM+2); - exit(1); - } - - ntests = init_tests(argc,argv); - - n = atol(argv[N_STREAM_PARAM+1]); - t = atoi(argv[N_STREAM_PARAM+2]); - + + if (argc != N_STREAM_PARAM + 3) + { + fprintf (stderr, "USAGE: %s (... %d arguments)\n", argv[0], + N_STREAM_PARAM + 2); + exit (1); + } + + ntests = init_tests (argc, argv); + + n = atol (argv[N_STREAM_PARAM + 1]); + t = atoi (argv[N_STREAM_PARAM + 2]); + V = new double[NTESTS]; V2 = new double[n]; - - for(i=0; i V[i]) - V[i] = temp; + V[i] = 0.0; + for (j = 0; j < t; j++) + { + temp = get_rn (); + + if (temp > V[i]) + V[i] = temp; + } } - } - - set_t(t); - temp = KS(V,n,xt); + + set_t (t); + temp = KS (V, n, xt); /*printf("\tKS for stream = %f, %% = %f\n", temp, KSpercent(temp,n));*/ - + /*delete [] V;*/ - + return temp; } diff -urN sprng5.orig/TESTS/mpitests/metropolis.cpp sprng5/TESTS/mpitests/metropolis.cpp --- sprng5.orig/TESTS/mpitests/metropolis.cpp 2011-08-06 11:56:40.000000000 +0000 +++ sprng5/TESTS/mpitests/metropolis.cpp 2021-01-15 16:35:52.000000000 +0000 @@ -15,378 +15,373 @@ #define SYNC int lattice_size, *spin, nsites; -Sprng **genptr; /* array of random number generators */ +Sprng **genptr; /* array of random number generators */ int exponent, mask; /* Used for efficiency purposes */ double prob; -double Energy[10][10], Cv[10][10], J=0.4406868; +double Energy[10][10], Cv[10][10], J = 0.4406868; double expJarray[17], *expJ; -double exact_energy=-1.4530649029, exact_Cv=1.4987048885; /***** This is correct ONLY for a 16x16 lattice!!****** */ +double exact_energy = -1.4530649029, exact_Cv = 1.4987048885; /***** This is correct ONLY for a 16x16 lattice!!****** */ -int RNG() /* Random number generator used for initializations alone */ +int RNG () /* Random number generator used for initializations alone */ { - static int seed=17; - seed=16807*(seed%127773)-(seed/127773)*2836; - if(seed<0) - seed+=2147483647; - else if(seed > 2147483647) - { - seed--; - seed -= 2147483647; - } - + static int seed = 17; + seed = 16807 * (seed % 127773) - (seed / 127773) * 2836; + if (seed < 0) + seed += 2147483647; + else if (seed > 2147483647) + { + seed--; + seed -= 2147483647; + } + return seed; } - int neighbor[4]; -int diff(int Ispin) +int diff (int Ispin) { - int i, s=0; + int i, s = 0; - if(Ispin>0) - for(i=0; i<4; i++) s+=neighbor[i]; + if (Ispin > 0) + for (i = 0; i < 4; i++) + s += neighbor[i]; else - for(i=0; i<4; i++) s-=neighbor[i]; - return s<<1; + for (i = 0; i < 4; i++) + s -= neighbor[i]; + return s << 1; } -int energy_difference(int site) +int energy_difference (int site) { int diffE; int ix, iy; - ix=site>>exponent; iy=site&mask; + ix = site >> exponent; + iy = site & mask; - if(iy==0) - neighbor[0]=spin[site+lattice_size-1]; - else - neighbor[0]=spin[site-1]; + if (iy == 0) + neighbor[0] = spin[site + lattice_size - 1]; + else + neighbor[0] = spin[site - 1]; - if(iy==lattice_size-1) - neighbor[2]=spin[ix*lattice_size]; - else - neighbor[2]=spin[site+1]; + if (iy == lattice_size - 1) + neighbor[2] = spin[ix * lattice_size]; + else + neighbor[2] = spin[site + 1]; - if(ix==0) - neighbor[1]=spin[lattice_size*(lattice_size-1)+iy]; - else - neighbor[1]=spin[site-lattice_size]; + if (ix == 0) + neighbor[1] = spin[lattice_size * (lattice_size - 1) + iy]; + else + neighbor[1] = spin[site - lattice_size]; - if(ix==lattice_size-1) - neighbor[3]=spin[iy]; - else - neighbor[3]=spin[site+lattice_size]; + if (ix == lattice_size - 1) + neighbor[3] = spin[iy]; + else + neighbor[3] = spin[site + lattice_size]; - diffE=diff(spin[site]); + diffE = diff (spin[site]); return diffE; } - -int System_Energy() /* Compute energy of lattice */ +int System_Energy () /* Compute energy of lattice */ { - int E =0; + int E = 0; int i, j, s; - for(i=0, s=0; igenptr[k]->sprng()){ + if (expJ[dE] > genptr[k]->sprng ()) + { #else if(dE<=0 || expJ[dE]>genptr[k]->sprng()){ #endif - energy += dE; - spin[k] = -spin[k]; + energy += dE; + spin[k] = -spin[k]; + } + } + average_E += energy; + average_Cv += energy * energy; } - } - average_E += energy; - average_Cv += energy*energy; - } - average_E /= (double) block_size*nsites; /*compute average of quantities */ - average_Cv /= (double) block_size; + average_E /= (double) block_size * nsites; /*compute average of quantities */ + average_Cv /= (double) block_size; - if(i>=10*divisor) /* make scale logarithmic for printing results */ - { - divisor *= 10; - row++; - } - - col = i/divisor; - average_E /= divisor; - average_Cv /= divisor; - Energy[row][col] += average_E; - Cv[row][col] += average_Cv; + if (i >= 10 * divisor) /* make scale logarithmic for printing results */ + { + divisor *= 10; + row++; + } - for(k=row+1; k<10; k++) - { - average_E /= 10; - average_Cv /= 10; - Energy[k][0] += average_E; - Cv[k][0] += average_Cv; + col = i / divisor; + average_E /= divisor; + average_Cv /= divisor; + Energy[row][col] += average_E; + Cv[row][col] += average_Cv; + + for (k = row + 1; k < 10; k++) + { + average_E /= 10; + average_Cv /= 10; + Energy[k][0] += average_E; + Cv[k][0] += average_Cv; + } + + if (old_row != row) + { + compute (old_row); + old_row = row; + } } - - if(old_row != row) - { - compute(old_row); - old_row = row; - } - } - compute(old_row); + compute (old_row); } /*--- adding rng_type as a parameter ---*/ -void minitialize(int rng_type, int seed, int param, int use_blocks) +void minitialize (int rng_type, int seed, int param, int use_blocks) { int i, j, temp; - - expJ = expJarray+8; - for(i=-8; i<9; i++) - expJ[i] = exp(-J*i); - - nsites = lattice_size*lattice_size; - prob = 1 - exp(-2.0*J); - for(i=0; i<10; i++) - for(j=0; j<10; j++) + expJ = expJarray + 8; + for (i = -8; i < 9; i++) + expJ[i] = exp (-J * i); + + nsites = lattice_size * lattice_size; + prob = 1 - exp (-2.0 * J); + + for (i = 0; i < 10; i++) + for (j = 0; j < 10; j++) Energy[i][j] = Cv[i][j] = 0.0; - - spin = static_cast(malloc(nsites*sizeof(int))); - if(!spin) - { - printf("\n\tMemory allocation failure, program exits!\n"); - exit(-1); - } + spin = static_cast (malloc (nsites * sizeof(int))); + if (!spin) + { + printf ("\n\tMemory allocation failure, program exits!\n"); + exit (-1); + } - - for(i=0; iprob)?1:-1; + for (i = 0; i < nsites; i++) /* randomly initialize system */ + spin[i] = (RNG () > prob) ? 1 : -1; /* here assume that expo is integer exponent of 2 */ - temp = mask=lattice_size-1; - exponent = 0; /* expo = log_2(lattice_size) */ - while(temp) - { - exponent++; - temp >>= 1; - } - + temp = mask = lattice_size - 1; + exponent = 0; /* expo = log_2(lattice_size) */ + while (temp) + { + exponent++; + temp >>= 1; + } + /* initialize generator */ - genptr = (Sprng **) malloc(nsites*sizeof(Sprng *)); - genptr[0] = SelectType(rng_type); - genptr[0]->init_sprng(0,nsites,seed,param); /*--- add rng_type ---*/ - genptr[0]->print_sprng(); + genptr = (Sprng**) malloc (nsites * sizeof(Sprng*)); + genptr[0] = SelectType (rng_type); + genptr[0]->init_sprng (0, nsites, seed, param); /*--- add rng_type ---*/ + genptr[0]->print_sprng (); - for(i=1; iinit_sprng(i,nsites,seed,param); /*--- add rng_type ---*/ + genptr[i] = SelectType (rng_type); + genptr[i]->init_sprng (i, nsites, seed, param); /*--- add rng_type ---*/ } #else genptr[i]=genptr[0]; #endif } - -void check_arguments(int lattice_size, int block_size, int discard_blocks, - int use_blocks) +void check_arguments (int lattice_size, int block_size, int discard_blocks, + int use_blocks) { - if(lattice_size<=0) - { - printf("ERROR: lattice_size %d should be > 0\n", lattice_size); - exit(-1); - } - if(block_size<=0) - { - printf("ERROR: Block_size %d should be > 0\n", block_size); - exit(-1); - } - if(discard_blocks<0) - { - printf("ERROR: discard_blocks %d should be >= 0\n", discard_blocks); - exit(-1); - } - if(use_blocks<=0) - { - printf("ERROR: use_blocks %d should be > 0\n", use_blocks); - exit(-1); - } - if((lattice_size&(lattice_size-1)) != 0) /* check if lattice_size = 2^n */ - { - printf("ERROR: lattice_size %d should be a positive power of 2\n", - lattice_size); - exit(-1); - } - if(lattice_size!=16) - { - printf("WARNING: The current code gives error values correctly only for a 16x16 lattice.\n\t... The Energy_error and Cv_error columns are incorrect.\n\t... Please use the Energy and Cv values and compute error from the exact solution.\n"); - } - while(use_blocks) /* check if use_blocks is a power of 10 */ - { - if(use_blocks%10 != 0 && use_blocks!=1) + if (lattice_size <= 0) { - printf("ERROR: use_blocks %d should be a power of 10\n", use_blocks); - exit(-1); + printf ("ERROR: lattice_size %d should be > 0\n", lattice_size); + exit (-1); } - use_blocks /= 10; - } + if (block_size <= 0) + { + printf ("ERROR: Block_size %d should be > 0\n", block_size); + exit (-1); + } + if (discard_blocks < 0) + { + printf ("ERROR: discard_blocks %d should be >= 0\n", discard_blocks); + exit (-1); + } + if (use_blocks <= 0) + { + printf ("ERROR: use_blocks %d should be > 0\n", use_blocks); + exit (-1); + } + if ((lattice_size & (lattice_size - 1)) != 0) /* check if lattice_size = 2^n */ + { + printf ("ERROR: lattice_size %d should be a positive power of 2\n", + lattice_size); + exit (-1); + } + if (lattice_size != 16) + { + printf ( + "WARNING: The current code gives error values correctly only for a 16x16 lattice.\n\t... The Energy_error and Cv_error columns are incorrect.\n\t... Please use the Energy and Cv values and compute error from the exact solution.\n"); + } + while (use_blocks) /* check if use_blocks is a power of 10 */ + { + if (use_blocks % 10 != 0 && use_blocks != 1) + { + printf ("ERROR: use_blocks %d should be a power of 10\n", use_blocks); + exit (-1); + } + use_blocks /= 10; + } } - - - /************** 'Thermalize' system so that results are not influenced - by the initial conditions *************/ -void thermalize(int block_size, int discard_blocks) +/************** 'Thermalize' system so that results are not influenced + by the initial conditions *************/ +void thermalize (int block_size, int discard_blocks) { int i, j, k, dE; - - for(i=0; igenptr[k]->sprng()) + if (expJ[dE] > genptr[k]->sprng ()) #else if(dE<=0 || expJ[dE]>genptr[k]->sprng()) #endif - { - spin[k] = -spin[k]; + { + spin[k] = -spin[k]; + } } - } } - - - /* block_size*use_blocks sweeps through a lattice of size -lattice_size*lattice_size using the Metropolis algorithm for the Ising model */ + lattice_size*lattice_size using the Metropolis algorithm for the Ising model */ -int main(int argc, char **argv) +int main (int argc, char **argv) { /*--- Add rng_time as the 1st argument ---*/ int rng_type; int seed, param, block_size, discard_blocks, use_blocks; - + /****************** Read and check Arguments ********************/ - if(argc==8 ) /*--- increase # of arguments by 1 ---*/ - { - argv++; - rng_type = atoi(*argv++); /*--- get rng_type ---*/ - seed = atoi(*argv++); - param = atoi(*argv++); - lattice_size = atoi(*argv++); - block_size = atoi(*argv++); - discard_blocks = atoi(*argv++); - use_blocks = atoi(*argv++); - check_arguments(lattice_size, block_size, discard_blocks, use_blocks); + if (argc == 8) /*--- increase # of arguments by 1 ---*/ + { + argv++; + rng_type = atoi (*argv++); /*--- get rng_type ---*/ + seed = atoi (*argv++); + param = atoi (*argv++); + lattice_size = atoi (*argv++); + block_size = atoi (*argv++); + discard_blocks = atoi (*argv++); + use_blocks = atoi (*argv++); + check_arguments (lattice_size, block_size, discard_blocks, use_blocks); #ifdef PARALLEL - printf("Metropolis Algorithm with Parallel RNG\n"); + printf ("Metropolis Algorithm with Parallel RNG\n"); #else printf("Metropolis Algorithm with Serial RNG\n"); #endif - printf("lattice_size = %d, block_size = %d, discard_blocks = %d, use_blocks = %d\n", lattice_size, block_size, discard_blocks, use_blocks); - } + printf ( + "lattice_size = %d, block_size = %d, discard_blocks = %d, use_blocks = %d\n", + lattice_size, block_size, discard_blocks, use_blocks); + } else - { - printf("USAGE: %s seed param lattice_size block_size discard_blocks use_blocks\n", argv[0]); - exit(-1); - } + { + printf ( + "USAGE: %s seed param lattice_size block_size discard_blocks use_blocks\n", + argv[0]); + exit (-1); + } /*--- add rng_type as the 1st parameter ---*/ /*--- in order not to duplicate initialize() ---*/ /*--- change to be minitialize() ---*/ - minitialize(rng_type, seed, param, use_blocks); /* initalize data */ - + minitialize (rng_type, seed, param, use_blocks); /* initalize data */ /************** 'Thermalize' system so that results are not influenced - by the initial conditions *************/ - thermalize(block_size, discard_blocks); - + by the initial conditions *************/ + thermalize (block_size, discard_blocks); + /********** Perform the actual Metropolis algorithm calculations *********/ - metropolis(block_size, use_blocks); + metropolis (block_size, use_blocks); return 0; } diff -urN sprng5.orig/TESTS/mpitests/perm.cpp sprng5/TESTS/mpitests/perm.cpp --- sprng5.orig/TESTS/mpitests/perm.cpp 2007-04-17 16:27:04.000000000 +0000 +++ sprng5/TESTS/mpitests/perm.cpp 2021-01-15 16:35:52.000000000 +0000 @@ -1,6 +1,6 @@ /********************************************************************* - Permutation Test -*********************************************************************/ + Permutation Test + *********************************************************************/ #include #include #include @@ -15,65 +15,72 @@ /* # of parameters for the test engin */ #define NUM_TEST_ENGIN_PARAM 2 /* Size of each group */ -static int grpSize; +static int grpSize; /* # of groups in each test */ -static long numGrp; +static long numGrp; /* # of bins */ -static long numBin; +static long numBin; /* # of tests repeated */ -static long numRepeat; +static long numRepeat; /* One group of random numbers */ -static double *oneGrp; +static double *oneGrp; /* Array of bins */ -static long *bins; +static long *bins; /* Array of corresponding probabilities */ -static double *probs; +static double *probs; /* Array of chi-squares */ -static double *chiSqrs; +static double *chiSqrs; /********************************************************************/ #define FATAL_ABORT printf("Program terminated.\n"); exit(0) /*------------------------------------------------------------------*/ -void initTest(int argc, char *argv[]) { - int numParam=NUM_TEST_ENGIN_PARAM+N_STREAM_PARAM; - long index; - double temp; +void initTest (int argc, char *argv[]) +{ + int numParam = NUM_TEST_ENGIN_PARAM + N_STREAM_PARAM; + long index; + double temp; - if (argc<(numParam+1)) { - printf("Error: %i number of parameters needed\n", numParam); - FATAL_ABORT; - } + if (argc < (numParam + 1)) + { + printf ("Error: %i number of parameters needed\n", numParam); + FATAL_ABORT + ; + } - grpSize = atoi(argv[N_STREAM_PARAM+1]); - numGrp = atol(argv[N_STREAM_PARAM+2]); - -if ((grpSize<=0) || (numGrp<=0)) { - printf("Error: incorrect parameter value(s)\n"); - FATAL_ABORT; - } + grpSize = atoi (argv[N_STREAM_PARAM + 1]); + numGrp = atol (argv[N_STREAM_PARAM + 2]); - for (numBin=index=1;index<=grpSize;index++) numBin *= index; - numRepeat = init_tests(argc, argv); + if ((grpSize <= 0) || (numGrp <= 0)) + { + printf ("Error: incorrect parameter value(s)\n"); + FATAL_ABORT + ; + } - oneGrp = new double[grpSize]; - bins = new long[numBin]; - probs = new double[numBin]; - chiSqrs = new double[NTESTS]; + for (numBin = index = 1; index <= grpSize; index++) + numBin *= index; + numRepeat = init_tests (argc, argv); - temp = 1.0 / numBin; + oneGrp = new double[grpSize]; + bins = new long[numBin]; + probs = new double[numBin]; + chiSqrs = new double[NTESTS]; - for (index=0;index(n*pr[i]); - - if(sum > 5 && i < k) + for (i = 1; i <= k; i++) { - sum = 0; - ncatagories++; + poker_index[i] = ncatagories; + sum += static_cast (n * pr[i]); + + if (sum > 5 && i < k) + { + sum = 0; + ncatagories++; + } } - } - + ncatagories++; actual = new long[ncatagories]; probability = new double[ncatagories]; - for(i=0; i< ncatagories; i++) + for (i = 0; i < ncatagories; i++) probability[i] = 0.0; - - for(i=1; i<=k; i++) + + for (i = 1; i <= k; i++) probability[poker_index[i]] += pr[i]; - - free(pr); + + free (pr); } -double poker(long n, int k, int d) +double poker (long n, int k, int d) { double temp; int j, sum; long i; - - memset(actual, 0, ncatagories*sizeof(long)); - - for(i=0; i #include @@ -14,54 +14,52 @@ using namespace std; - #define sgn(a) ((a<0)?0:1) - void random_walk (int walk_length, double *quadrant); - -int main(int argc, char *argv[]) +int main (int argc, char *argv[]) { long ntests, walk_length, i; double result, expected, chisum, quadrant[4]; - + quadrant[0] = quadrant[1] = quadrant[2] = quadrant[3] = 0; - - if(argc != N_STREAM_PARAM + 2) - { - fprintf(stderr,"USAGE: %s (... %d arguments)\n",argv[0], N_STREAM_PARAM+1); - exit(1); - } - - ntests = init_tests(argc,argv); - - walk_length = atoi(argv[N_STREAM_PARAM+1]); - - for(i=0; i 0.75) - x++; - else if(rn > 0.5) - x--; - else if(rn > 0.25) - y++; - else - y--; - } - if(x == 0 && y == 0) - { - quadrant[0] += 0.25; - quadrant[1] += 0.25; - quadrant[2] += 0.25; - quadrant[3] += 0.25; - } - else if(x == 0) - { - quadrant[sgn(y)] += 0.5; - quadrant[2+sgn(y)] += 0.5; - } - else if(y == 0) - { - quadrant[2*sgn(x)] += 0.5; - quadrant[2*sgn(x)+1] += 0.5; - } + for (i = 0; i < walk_length; i++) + { + rn = get_rn (); + + if (rn > 0.75) + x++; + else if (rn > 0.5) + x--; + else if (rn > 0.25) + y++; + else + y--; + } + + if (x == 0 && y == 0) + { + quadrant[0] += 0.25; + quadrant[1] += 0.25; + quadrant[2] += 0.25; + quadrant[3] += 0.25; + } + else if (x == 0) + { + quadrant[sgn(y)] += 0.5; + quadrant[2 + sgn(y)] += 0.5; + } + else if (y == 0) + { + quadrant[2 * sgn(x)] += 0.5; + quadrant[2 * sgn(x) + 1] += 0.5; + } else - quadrant[2*sgn(x)+sgn(y)] += 1.0; + quadrant[2 * sgn(x) + sgn(y)] += 1.0; } diff -urN sprng5.orig/TESTS/mpitests/runs.cpp sprng5/TESTS/mpitests/runs.cpp --- sprng5.orig/TESTS/mpitests/runs.cpp 2011-08-06 15:51:16.000000000 +0000 +++ sprng5/TESTS/mpitests/runs.cpp 2021-01-15 16:35:52.000000000 +0000 @@ -1,6 +1,6 @@ /********************************************************************* - Run Test -*********************************************************************/ + Run Test + *********************************************************************/ #include #include @@ -15,61 +15,67 @@ /* # of parameters for the test engin */ #define NUM_TEST_ENGIN_PARAM 2 /* Maximum run length */ -static int maxRunLen; +static int maxRunLen; /* # of runs in each test */ -static long numRun; +static long numRun; /* # of bins */ -static int numBin; +static int numBin; /* # of tests repeated */ -static long numRepeat; +static long numRepeat; /* Array of bins */ -static long *bins; +static long *bins; /* Array of corresponding probabilities */ -static double *probs; +static double *probs; /* Array of chi-squares */ -static double *chiSqrs; +static double *chiSqrs; /********************************************************************/ #define FATAL_ABORT printf("Program terminated.\n"); exit(0) /*------------------------------------------------------------------*/ -void initTest(int argc, char *argv[]) { - int numParam=NUM_TEST_ENGIN_PARAM+N_STREAM_PARAM; - int index; +void initTest (int argc, char *argv[]) +{ + int numParam = NUM_TEST_ENGIN_PARAM + N_STREAM_PARAM; + int index; - if (argc<(numParam+1)) { - printf("Error: %i number of parameters needed\n", numParam); - FATAL_ABORT; - } + if (argc < (numParam + 1)) + { + printf ("Error: %i number of parameters needed\n", numParam); + FATAL_ABORT + ; + } - maxRunLen = atoi(argv[N_STREAM_PARAM+1]); - numRun = atol(argv[N_STREAM_PARAM+2]); - if ((maxRunLen<=0) || (numRun<=0)) { - printf("Error: incorrect parameter value(s)\n"); - FATAL_ABORT; - } + maxRunLen = atoi (argv[N_STREAM_PARAM + 1]); + numRun = atol (argv[N_STREAM_PARAM + 2]); + if ((maxRunLen <= 0) || (numRun <= 0)) + { + printf ("Error: incorrect parameter value(s)\n"); + FATAL_ABORT + ; + } - /* +1 to include ">maxRunLen" case */ - numBin = maxRunLen + 1; - numRepeat = init_tests(argc, argv); + /* +1 to include ">maxRunLen" case */ + numBin = maxRunLen + 1; + numRepeat = init_tests (argc, argv); - bins = new long int[numBin]; - probs = new double[numBin]; - chiSqrs = new double[NTESTS]; + bins = new long int[numBin]; + probs = new double[numBin]; + chiSqrs = new double[NTESTS]; - probs[0] = 0.5; - for (index=2;index #include #include @@ -15,58 +15,65 @@ /* # of parameters for the test engin */ #define NUM_TEST_ENGIN_PARAM 2 /* # of divisions between [0,1) */ -static long numDiv; +static long numDiv; /* # of random-numbers pairs being tested */ -static long numPair; +static long numPair; /* # of bins */ -static long numBin; +static long numBin; /* # of tests repeated */ -static long numRepeat; +static long numRepeat; /* Array of bins */ -static long *bins; +static long *bins; /* Array of corresponding probabilities */ -static double *probs; +static double *probs; /* Array of chi-squares */ -static double *chiSqrs; +static double *chiSqrs; /********************************************************************/ #define FATAL_ABORT printf("Program terminated.\n"); exit(0) /*------------------------------------------------------------------*/ -void initTest(int argc, char *argv[]) { - int numParam=NUM_TEST_ENGIN_PARAM+N_STREAM_PARAM; - long index; - double temp; +void initTest (int argc, char *argv[]) +{ + int numParam = NUM_TEST_ENGIN_PARAM + N_STREAM_PARAM; + long index; + double temp; - if (argc<(numParam+1)) { - printf("Error: %i number of parameters needed\n", numParam); - FATAL_ABORT; - } + if (argc < (numParam + 1)) + { + printf ("Error: %i number of parameters needed\n", numParam); + FATAL_ABORT + ; + } - numDiv = atol(argv[N_STREAM_PARAM+1]); - numPair = atol(argv[N_STREAM_PARAM+2]); - if ((numDiv<=0) || (numPair<=0)) { - printf("Error: incorrect parameter value(s)\n"); - FATAL_ABORT; - } - numBin = numDiv * numDiv; - numRepeat = init_tests(argc, argv); + numDiv = atol (argv[N_STREAM_PARAM + 1]); + numPair = atol (argv[N_STREAM_PARAM + 2]); + if ((numDiv <= 0) || (numPair <= 0)) + { + printf ("Error: incorrect parameter value(s)\n"); + FATAL_ABORT + ; + } + numBin = numDiv * numDiv; + numRepeat = init_tests (argc, argv); - bins = new long int[numBin]; - probs = new double[numBin]; - chiSqrs = new double[NTESTS]; + bins = new long int[numBin]; + probs = new double[numBin]; + chiSqrs = new double[NTESTS]; - temp = 1.0 / numBin; - for (index=0;index 0) + else if (m == 0 && n > 0) return 0.0; - else if(m == 1 && n > 0) + else if (m == 1 && n > 0) return 1.0; - - s = new double *[m]; - for(i=0; i #include #include @@ -15,49 +14,48 @@ #define min(a,b) ((a)<(b))?(a):(b) #define max(a,b) ((a)>(b))?(a):(b) -double test_normal(double *array, int n); -void set_normal_params(double mu, double sd); -double normalF(double x); -void mean_sd(double *x, int n, double *mean, double *sd); +double test_normal (double *array, int n); +void set_normal_params (double mu, double sd); +double normalF (double x); +void mean_sd (double *x, int n, double *mean, double *sd); int group_size; -int main(int argc, char *argv[]) +int main (int argc, char *argv[]) { int ntests, n, i, j, k; double result, *temparray, *sumarray; - /****************** Initialization values *******************************/ - if(argc != N_STREAM_PARAM+3 || atoi(argv[2]) != 1) - { - fprintf(stderr,"USAGE: %s nstreams 1 seed param 1 0 n group_size\n", - argv[0]); - exit(-1); - } + if (argc != N_STREAM_PARAM + 3 || atoi (argv[2]) != 1) + { + fprintf (stderr, "USAGE: %s nstreams 1 seed param 1 0 n group_size\n", + argv[0]); + exit (-1); + } - ntests = init_tests(argc,argv); - - n = atoi(argv[N_STREAM_PARAM+1]); - group_size = atoi(argv[N_STREAM_PARAM+2]); - + ntests = init_tests (argc, argv); + + n = atoi (argv[N_STREAM_PARAM + 1]); + group_size = atoi (argv[N_STREAM_PARAM + 2]); + temparray = new double[n]; sumarray = new double[n]; - - for(j=0; j 2147483647) - { - seed--; - seed -= 2147483647; - } - + static int seed = 17; + seed = 16807 * (seed % 127773) - (seed / 127773) * 2836; + if (seed < 0) + seed += 2147483647; + else if (seed > 2147483647) + { + seed--; + seed -= 2147483647; + } + return seed; } - -void Single_Cluster_Update(void) /* update lattice spins: a single sweep */ +void Single_Cluster_Update (void) /* update lattice spins: a single sweep */ { - static int nSite[4], Ipt=-1; + static int nSite[4], Ipt = -1; int i, j, nnJ, ix, iy; - - i = RNG()>>(31-(exponent<<1)); - if(i<0) - i += nsites; - spin[i] = -spin[i]; - - while(i >= 0) - { - /* ix=I/size; iy=I%size; */ - ix =i>>exponent; iy=i&mask; - /* printf("ix=%d, iy=%d) ", ix, iy); */ - if(iy==0) nSite[0]=(ix<sprng() > prob) - continue; - spin[nnJ]=-spin[nnJ]; - stack[++Ipt]=nnJ; - } - - if(Ipt>=0) - { - i=stack[Ipt]; - Ipt--; - } - else i=-1; - } -} + i = RNG () >> (31 - (exponent << 1)); + if (i < 0) + i += nsites; + spin[i] = -spin[i]; -int System_Energy() /* Compute energy of lattice */ + while (i >= 0) + { + /* ix=I/size; iy=I%size; */ + ix = i >> exponent; + iy = i & mask; + /* printf("ix=%d, iy=%d) ", ix, iy); */ + if (iy == 0) + nSite[0] = (ix << exponent) + mask; /* nSite[0]=ix*size+size-1; */ + else + nSite[0] = i - 1; + + if (iy == lattice_size - 1) + nSite[2] = ix << exponent; /* nSite[2]=ix*size; */ + else + nSite[2] = i + 1; + + if (ix == 0) + nSite[1] = (mask << exponent) + iy; /* nSite[1]=(size-1)*size+iy; */ + else + nSite[1] = i - lattice_size; + + if (ix == lattice_size - 1) + nSite[3] = iy; + else + nSite[3] = i + lattice_size; + + for (j = 0; j < 4; j++) + { + nnJ = nSite[j]; + if (spin[i] == spin[nnJ]) + continue; + /* notice prog should be scaled to MAXIMUM if necessary */ + if (genptr[i]->sprng () > prob) + continue; + spin[nnJ] = -spin[nnJ]; + stack[++Ipt] = nnJ; + } + + if (Ipt >= 0) + { + i = stack[Ipt]; + Ipt--; + } + else + i = -1; + } +} + +int System_Energy () /* Compute energy of lattice */ { - int E =0; + int E = 0; int i, j, s; - for(i=0, s=0; i=10*divisor) /* make scale logarithmic for printing results */ - { - divisor *= 10; - row++; - } - - col = i/divisor; - average_E /= divisor; - average_Cv /= divisor; - Energy[row][col] += average_E; - Cv[row][col] += average_Cv; + if (i >= 10 * divisor) /* make scale logarithmic for printing results */ + { + divisor *= 10; + row++; + } - for(k=row+1; k<10; k++) - { - average_E /= 10; - average_Cv /= 10; - Energy[k][0] += average_E; - Cv[k][0] += average_Cv; + col = i / divisor; + average_E /= divisor; + average_Cv /= divisor; + Energy[row][col] += average_E; + Cv[row][col] += average_Cv; + + for (k = row + 1; k < 10; k++) + { + average_E /= 10; + average_Cv /= 10; + Energy[k][0] += average_E; + Cv[k][0] += average_Cv; + } + + if (old_row != row) + { + compute (old_row); + old_row = row; + } } - - if(old_row != row) - { - compute(old_row); - old_row = row; - } - } - compute(old_row); + compute (old_row); } /*--- in order not to duplicate with initialize ---*/ /*--- change from initialize() to minitialize() ---*/ -void minitialize(int rng_type, int seed, int param, int use_blocks) +void minitialize (int rng_type, int seed, int param, int use_blocks) { int i, j, temp; - - nsites = lattice_size*lattice_size; - prob = 1 - exp(-2.0*J); - for(i=0; i<10; i++) - for(j=0; j<10; j++) + nsites = lattice_size * lattice_size; + prob = 1 - exp (-2.0 * J); + + for (i = 0; i < 10; i++) + for (j = 0; j < 10; j++) Energy[i][j] = Cv[i][j] = 0.0; - - spin = static_cast(malloc(nsites*sizeof(int))); - stack = static_cast(malloc(nsites*sizeof(int))); - if(!spin || !stack) - { - printf("\n\tMemory allocation failure, program exits!\n"); - exit(-1); - } + spin = static_cast (malloc (nsites * sizeof(int))); + stack = static_cast (malloc (nsites * sizeof(int))); + if (!spin || !stack) + { + printf ("\n\tMemory allocation failure, program exits!\n"); + exit (-1); + } - - for(i=0; iprob)?1:-1; + for (i = 0; i < nsites; i++) /* randomly initialize system */ + spin[i] = (RNG () > prob) ? 1 : -1; /* here assume that expo is integer exponent of 2 */ - temp = mask=lattice_size-1; - exponent = 0; /* expo = log_2(lattice_size) */ - while(temp) - { - exponent++; - temp >>= 1; - } - + temp = mask = lattice_size - 1; + exponent = 0; /* expo = log_2(lattice_size) */ + while (temp) + { + exponent++; + temp >>= 1; + } + /* initialize generator */ - genptr = (Sprng **) malloc(nsites*sizeof(Sprng *)); - genptr[0] = SelectType(rng_type); - genptr[0]->init_sprng(0,nsites,seed,param); /*--- add rng_type ---*/ - genptr[0]->print_sprng(); - for(i=1; iinit_sprng (0, nsites, seed, param); /*--- add rng_type ---*/ + genptr[0]->print_sprng (); + for (i = 1; i < nsites; i++) #ifdef PARALLEL genptr[i] = SelectType(rng_type); genptr[i]->init_sprng(i,nsites,seed,param); /*--- add rng_type ---*/ #else - genptr[i]=genptr[0]; + genptr[i] = genptr[0]; #endif } - -void check_arguments(int lattice_size, int block_size, int discard_blocks, - int use_blocks) +void check_arguments (int lattice_size, int block_size, int discard_blocks, + int use_blocks) { - if(lattice_size<=0) - { - printf("ERROR: lattice_size %d should be > 0\n", lattice_size); - exit(-1); - } - if(block_size<=0) - { - printf("ERROR: Block_size %d should be > 0\n", block_size); - exit(-1); - } - if(discard_blocks<=0) - { - printf("ERROR: discard_blocks %d should be > 0\n", discard_blocks); - exit(-1); - } - if(use_blocks<=0) - { - printf("ERROR: use_blocks %d should be > 0\n", use_blocks); - exit(-1); - } - if((lattice_size&(lattice_size-1)) != 0) /* check if lattice_size = 2^n */ - { - printf("ERROR: lattice_size %d should be a positive power of 2\n", - lattice_size); - exit(-1); - } - if(lattice_size!=16) - { - printf("WARNING: The current code gives error values correctly only for a 16x16 lattice.\n\t... The Energy_error and Cv_error columns are incorrect.\n\t... Please use the Energy and Cv values and compute error from the exact solution.\n"); - } - while(use_blocks) /* check if use_blocks is a power of 10 */ - { - if(use_blocks%10 != 0 && use_blocks!=1) + if (lattice_size <= 0) { - printf("ERROR: use_blocks %d should be a power of 10\n", use_blocks); - exit(-1); + printf ("ERROR: lattice_size %d should be > 0\n", lattice_size); + exit (-1); } - use_blocks /= 10; - } + if (block_size <= 0) + { + printf ("ERROR: Block_size %d should be > 0\n", block_size); + exit (-1); + } + if (discard_blocks <= 0) + { + printf ("ERROR: discard_blocks %d should be > 0\n", discard_blocks); + exit (-1); + } + if (use_blocks <= 0) + { + printf ("ERROR: use_blocks %d should be > 0\n", use_blocks); + exit (-1); + } + if ((lattice_size & (lattice_size - 1)) != 0) /* check if lattice_size = 2^n */ + { + printf ("ERROR: lattice_size %d should be a positive power of 2\n", + lattice_size); + exit (-1); + } + if (lattice_size != 16) + { + printf ( + "WARNING: The current code gives error values correctly only for a 16x16 lattice.\n\t... The Energy_error and Cv_error columns are incorrect.\n\t... Please use the Energy and Cv values and compute error from the exact solution.\n"); + } + while (use_blocks) /* check if use_blocks is a power of 10 */ + { + if (use_blocks % 10 != 0 && use_blocks != 1) + { + printf ("ERROR: use_blocks %d should be a power of 10\n", use_blocks); + exit (-1); + } + use_blocks /= 10; + } } - - - /************** 'Thermalize' system so that results are not influenced - by the initial onditions *************/ -void thermalize(int block_size, int discard_blocks) +/************** 'Thermalize' system so that results are not influenced + by the initial onditions *************/ +void thermalize (int block_size, int discard_blocks) { int i, j; - - for(i=0; i #include #include @@ -15,65 +15,72 @@ /* # of parameters for the test engin */ #define NUM_TEST_ENGIN_PARAM 2 /* Size of each group */ -static int grpSize; +static int grpSize; /* # of groups in each test */ -static long numGrp; +static long numGrp; /* # of bins */ -static long numBin; +static long numBin; /* # of tests repeated */ -static long numRepeat; +static long numRepeat; /* One group of random numbers */ -static double *oneGrp; +static double *oneGrp; /* Array of bins */ -static long *bins; +static long *bins; /* Array of corresponding probabilities */ -static double *probs; +static double *probs; /* Array of chi-squares */ -static double *chiSqrs; +static double *chiSqrs; /********************************************************************/ #define FATAL_ABORT printf("Program terminated.\n"); exit(0) /*------------------------------------------------------------------*/ -void initTest(int argc, char *argv[]) { - int numParam=NUM_TEST_ENGIN_PARAM+N_STREAM_PARAM; - long index; - double temp; +void initTest (int argc, char *argv[]) +{ + int numParam = NUM_TEST_ENGIN_PARAM + N_STREAM_PARAM; + long index; + double temp; - if (argc<(numParam+1)) { - printf("Error: %i number of parameters needed\n", numParam); - FATAL_ABORT; - } + if (argc < (numParam + 1)) + { + printf ("Error: %i number of parameters needed\n", numParam); + FATAL_ABORT + ; + } - grpSize = atoi(argv[N_STREAM_PARAM+1]); - numGrp = atol(argv[N_STREAM_PARAM+2]); - -if ((grpSize<=0) || (numGrp<=0)) { - printf("Error: incorrect parameter value(s)\n"); - FATAL_ABORT; - } + grpSize = atoi (argv[N_STREAM_PARAM + 1]); + numGrp = atol (argv[N_STREAM_PARAM + 2]); - for (numBin=index=1;index<=grpSize;index++) numBin *= index; - numRepeat = init_tests(argc, argv); + if ((grpSize <= 0) || (numGrp <= 0)) + { + printf ("Error: incorrect parameter value(s)\n"); + FATAL_ABORT + ; + } - oneGrp = new double[grpSize]; - bins = new long[numBin]; - probs = new double[numBin]; - chiSqrs = new double[NTESTS]; + for (numBin = index = 1; index <= grpSize; index++) + numBin *= index; + numRepeat = init_tests (argc, argv); - temp = 1.0 / numBin; + oneGrp = new double[grpSize]; + bins = new long[numBin]; + probs = new double[numBin]; + chiSqrs = new double[NTESTS]; - for (index=0;index(n*pr[i]); - - if(sum > 5 && i < k) + for (i = 1; i <= k; i++) { - sum = 0; - ncatagories++; + poker_index[i] = ncatagories; + sum += static_cast (n * pr[i]); + + if (sum > 5 && i < k) + { + sum = 0; + ncatagories++; + } } - } - + ncatagories++; actual = new long[ncatagories]; probability = new double[ncatagories]; - for(i=0; i< ncatagories; i++) + for (i = 0; i < ncatagories; i++) probability[i] = 0.0; - - for(i=1; i<=k; i++) + + for (i = 1; i <= k; i++) probability[poker_index[i]] += pr[i]; - - free(pr); + + free (pr); } -double poker(long n, int k, int d) +double poker (long n, int k, int d) { double temp; int j, sum; long i; - - memset(actual, 0, ncatagories*sizeof(long)); - - for(i=0; i #include @@ -14,54 +14,52 @@ using namespace std; - #define sgn(a) ((a<0)?0:1) - void random_walk (int walk_length, double *quadrant); - -int main(int argc, char *argv[]) +int main (int argc, char *argv[]) { long ntests, walk_length, i; double result, expected, chisum, quadrant[4]; - + quadrant[0] = quadrant[1] = quadrant[2] = quadrant[3] = 0; - - if(argc != N_STREAM_PARAM + 2) - { - fprintf(stderr,"USAGE: %s (... %d arguments)\n",argv[0], N_STREAM_PARAM+1); - exit(1); - } - - ntests = init_tests(argc,argv); - - walk_length = atoi(argv[N_STREAM_PARAM+1]); - - for(i=0; i 0.75) - x++; - else if(rn > 0.5) - x--; - else if(rn > 0.25) - y++; - else - y--; - } - if(x == 0 && y == 0) - { - quadrant[0] += 0.25; - quadrant[1] += 0.25; - quadrant[2] += 0.25; - quadrant[3] += 0.25; - } - else if(x == 0) - { - quadrant[sgn(y)] += 0.5; - quadrant[2+sgn(y)] += 0.5; - } - else if(y == 0) - { - quadrant[2*sgn(x)] += 0.5; - quadrant[2*sgn(x)+1] += 0.5; - } + for (i = 0; i < walk_length; i++) + { + rn = get_rn (); + + if (rn > 0.75) + x++; + else if (rn > 0.5) + x--; + else if (rn > 0.25) + y++; + else + y--; + } + + if (x == 0 && y == 0) + { + quadrant[0] += 0.25; + quadrant[1] += 0.25; + quadrant[2] += 0.25; + quadrant[3] += 0.25; + } + else if (x == 0) + { + quadrant[sgn(y)] += 0.5; + quadrant[2 + sgn(y)] += 0.5; + } + else if (y == 0) + { + quadrant[2 * sgn(x)] += 0.5; + quadrant[2 * sgn(x) + 1] += 0.5; + } else - quadrant[2*sgn(x)+sgn(y)] += 1.0; + quadrant[2 * sgn(x) + sgn(y)] += 1.0; } diff -urN sprng5.orig/TESTS/runs.cpp sprng5/TESTS/runs.cpp --- sprng5.orig/TESTS/runs.cpp 2011-08-06 15:50:56.000000000 +0000 +++ sprng5/TESTS/runs.cpp 2021-01-15 16:37:36.000000000 +0000 @@ -1,6 +1,6 @@ /********************************************************************* - Run Test -*********************************************************************/ + Run Test + *********************************************************************/ #include #include @@ -15,61 +15,67 @@ /* # of parameters for the test engin */ #define NUM_TEST_ENGIN_PARAM 2 /* Maximum run length */ -static int maxRunLen; +static int maxRunLen; /* # of runs in each test */ -static long numRun; +static long numRun; /* # of bins */ -static int numBin; +static int numBin; /* # of tests repeated */ -static long numRepeat; +static long numRepeat; /* Array of bins */ -static long *bins; +static long *bins; /* Array of corresponding probabilities */ -static double *probs; +static double *probs; /* Array of chi-squares */ -static double *chiSqrs; +static double *chiSqrs; /********************************************************************/ #define FATAL_ABORT printf("Program terminated.\n"); exit(0) /*------------------------------------------------------------------*/ -void initTest(int argc, char *argv[]) { - int numParam=NUM_TEST_ENGIN_PARAM+N_STREAM_PARAM; - int index; +void initTest (int argc, char *argv[]) +{ + int numParam = NUM_TEST_ENGIN_PARAM + N_STREAM_PARAM; + int index; - if (argc<(numParam+1)) { - printf("Error: %i number of parameters needed\n", numParam); - FATAL_ABORT; - } + if (argc < (numParam + 1)) + { + printf ("Error: %i number of parameters needed\n", numParam); + FATAL_ABORT + ; + } - maxRunLen = atoi(argv[N_STREAM_PARAM+1]); - numRun = atol(argv[N_STREAM_PARAM+2]); - if ((maxRunLen<=0) || (numRun<=0)) { - printf("Error: incorrect parameter value(s)\n"); - FATAL_ABORT; - } + maxRunLen = atoi (argv[N_STREAM_PARAM + 1]); + numRun = atol (argv[N_STREAM_PARAM + 2]); + if ((maxRunLen <= 0) || (numRun <= 0)) + { + printf ("Error: incorrect parameter value(s)\n"); + FATAL_ABORT + ; + } - /* +1 to include ">maxRunLen" case */ - numBin = maxRunLen + 1; - numRepeat = init_tests(argc, argv); + /* +1 to include ">maxRunLen" case */ + numBin = maxRunLen + 1; + numRepeat = init_tests (argc, argv); - bins = new long int[numBin]; - probs = new double[numBin]; - chiSqrs = new double[NTESTS]; + bins = new long int[numBin]; + probs = new double[numBin]; + chiSqrs = new double[NTESTS]; - probs[0] = 0.5; - for (index=2;index #include #include @@ -15,58 +15,65 @@ /* # of parameters for the test engin */ #define NUM_TEST_ENGIN_PARAM 2 /* # of divisions between [0,1) */ -static long numDiv; +static long numDiv; /* # of random-numbers pairs being tested */ -static long numPair; +static long numPair; /* # of bins */ -static long numBin; +static long numBin; /* # of tests repeated */ -static long numRepeat; +static long numRepeat; /* Array of bins */ -static long *bins; +static long *bins; /* Array of corresponding probabilities */ -static double *probs; +static double *probs; /* Array of chi-squares */ -static double *chiSqrs; +static double *chiSqrs; /********************************************************************/ #define FATAL_ABORT printf("Program terminated.\n"); exit(0) /*------------------------------------------------------------------*/ -void initTest(int argc, char *argv[]) { - int numParam=NUM_TEST_ENGIN_PARAM+N_STREAM_PARAM; - long index; - double temp; +void initTest (int argc, char *argv[]) +{ + int numParam = NUM_TEST_ENGIN_PARAM + N_STREAM_PARAM; + long index; + double temp; - if (argc<(numParam+1)) { - printf("Error: %i number of parameters needed\n", numParam); - FATAL_ABORT; - } + if (argc < (numParam + 1)) + { + printf ("Error: %i number of parameters needed\n", numParam); + FATAL_ABORT + ; + } - numDiv = atol(argv[N_STREAM_PARAM+1]); - numPair = atol(argv[N_STREAM_PARAM+2]); - if ((numDiv<=0) || (numPair<=0)) { - printf("Error: incorrect parameter value(s)\n"); - FATAL_ABORT; - } - numBin = numDiv * numDiv; - numRepeat = init_tests(argc, argv); + numDiv = atol (argv[N_STREAM_PARAM + 1]); + numPair = atol (argv[N_STREAM_PARAM + 2]); + if ((numDiv <= 0) || (numPair <= 0)) + { + printf ("Error: incorrect parameter value(s)\n"); + FATAL_ABORT + ; + } + numBin = numDiv * numDiv; + numRepeat = init_tests (argc, argv); - bins = new long int[numBin]; - probs = new double[numBin]; - chiSqrs = new double[NTESTS]; + bins = new long int[numBin]; + probs = new double[numBin]; + chiSqrs = new double[NTESTS]; - temp = 1.0 / numBin; - for (index=0;index 0) + else if (m == 0 && n > 0) return 0.0; - else if(m == 1 && n > 0) + else if (m == 1 && n > 0) return 1.0; - - s = new double *[m]; - for(i=0; i #include #include @@ -15,49 +14,48 @@ #define min(a,b) ((a)<(b))?(a):(b) #define max(a,b) ((a)>(b))?(a):(b) -double test_normal(double *array, int n); -void set_normal_params(double mu, double sd); -double normalF(double x); -void mean_sd(double *x, int n, double *mean, double *sd); +double test_normal (double *array, int n); +void set_normal_params (double mu, double sd); +double normalF (double x); +void mean_sd (double *x, int n, double *mean, double *sd); int group_size; -int main(int argc, char *argv[]) +int main (int argc, char *argv[]) { int ntests, n, i, j, k; double result, *temparray, *sumarray; - /****************** Initialization values *******************************/ - if(argc != N_STREAM_PARAM+3 || atoi(argv[2]) != 1) - { - fprintf(stderr,"USAGE: %s nstreams 1 seed param 1 0 n group_size\n", - argv[0]); - exit(-1); - } + if (argc != N_STREAM_PARAM + 3 || atoi (argv[2]) != 1) + { + fprintf (stderr, "USAGE: %s nstreams 1 seed param 1 0 n group_size\n", + argv[0]); + exit (-1); + } - ntests = init_tests(argc,argv); - - n = atoi(argv[N_STREAM_PARAM+1]); - group_size = atoi(argv[N_STREAM_PARAM+2]); - + ntests = init_tests (argc, argv); + + n = atoi (argv[N_STREAM_PARAM + 1]); + group_size = atoi (argv[N_STREAM_PARAM + 2]); + temparray = new double[n]; sumarray = new double[n]; - - for(j=0; j - #include - #include - - #include "sprng_cpp.h" - extern "C" { - #include "unif01.h" - #include "bbattery.h" - } - - using namespace std; - - Sprng * ptr; - - /* Returns generated double-precision numbers for testU01 generator */ - double genRanDbl(void) { - return ptr->sprng(); - } - - - int main(int argc, char* argv[]) { - int streamnum, nstreams; - int gtype, seed, param; - unif01_Gen *gen; - - if (argc < 2) { - std::cout << "Usage: " << argv[0] << " genType seed[optional] parameter[optional]\n"; - return 1; - } - - gtype = atoi(argv[1]); - - if (argc > 2) { - seed = atoi(argv[2]); - } else { - seed = 985456376; - } - - if (argc > 3) { - param = atoi(argv[3]); - } else { - param = SPRNG_DEFAULT; - } - - streamnum = 0; - nstreams = 1; - - ptr = SelectType(gtype); - ptr->init_sprng(streamnum, nstreams, seed, param); - - printf("\n --------------------------------------------------------\n"); - printf(" Printing information about stream:\n"); - ptr->print_sprng(); - - gen = unif01_CreateExternGen01 ("SPRNG Double", genRanDbl); /* Create testU01 generator */ - - bbattery_FIPS_140_2(gen); - - unif01_DeleteExternGen01 (gen); /* Delete testU01 generator */ - ptr->free_sprng(); /* free memory used to store stream state */ - - return 0; -} - \ No newline at end of file +#include +#include +#include + +#include "sprng_cpp.h" +extern "C" +{ +#include "unif01.h" +#include "bbattery.h" +} + +using namespace std; + +Sprng *ptr; + +/* Returns generated double-precision numbers for testU01 generator */ +double genRanDbl (void) +{ + return ptr->sprng (); +} + +int main (int argc, char *argv[]) +{ + int streamnum, nstreams; + int gtype, seed, param; + unif01_Gen *gen; + + if (argc < 2) + { + std::cout << "Usage: " << argv[0] + << " genType seed[optional] parameter[optional]\n"; + return 1; + } + + gtype = atoi (argv[1]); + + if (argc > 2) + { + seed = atoi (argv[2]); + } + else + { + seed = 985456376; + } + + if (argc > 3) + { + param = atoi (argv[3]); + } + else + { + param = SPRNG_DEFAULT; + } + + streamnum = 0; + nstreams = 1; + + ptr = SelectType (gtype); + ptr->init_sprng (streamnum, nstreams, seed, param); + + printf ("\n --------------------------------------------------------\n"); + printf (" Printing information about stream:\n"); + ptr->print_sprng (); + + gen = unif01_CreateExternGen01 ("SPRNG Double", genRanDbl); /* Create testU01 generator */ + + bbattery_FIPS_140_2 (gen); + + unif01_DeleteExternGen01 (gen); /* Delete testU01 generator */ + ptr->free_sprng (); /* free memory used to store stream state */ + + return 0; +} diff -urN sprng5.orig/TESTS/testu01/tu01_alphabit.cpp sprng5/TESTS/testu01/tu01_alphabit.cpp --- sprng5.orig/TESTS/testu01/tu01_alphabit.cpp 2014-06-25 15:30:47.000000000 +0000 +++ sprng5/TESTS/testu01/tu01_alphabit.cpp 2021-05-18 00:01:38.000000000 +0000 @@ -1,83 +1,101 @@ - #include - #include - #include - - #include "sprng_cpp.h" - extern "C" { - #include "unif01.h" - #include "bbattery.h" - } - - using namespace std; - - Sprng * ptr; - - /* Returns generated double-precision numbers for testU01 generator */ - double genRanDbl(void) { - return ptr->sprng(); - } - - - int main(int argc, char* argv[]) { - int streamnum, nstreams; - int gtype, seed, param; - int nbits, r, s; - unif01_Gen *gen; - - if (argc < 2) { - std::cout << "Usage: " << argv[0] << " genType seed[optional] parameter[optional] nbits[optional, default=32] r[optional, default=0] s[optional, default=500]\n"; - return 1; - } - - gtype = atoi(argv[1]); - - if (argc > 2) { - seed = atoi(argv[2]); - } else { - seed = 985456376; - } - - if (argc > 3) { - param = atoi(argv[3]); - } else { - param = SPRNG_DEFAULT; - } - - if (argc > 4) { - nbits = atoi(argv[4]); - } else { - nbits = 500; - } - - if (argc > 5) { - r = atoi(argv[5]); - } else { - r = 0; - } - - if (argc > 6) { - s = atoi(argv[6]); - } else { - s = 32; - } - - streamnum = 0; - nstreams = 1; - - ptr = SelectType(gtype); - ptr->init_sprng(streamnum, nstreams, seed, param); - - printf("\n --------------------------------------------------------\n"); - printf(" Printing information about stream:\n"); - ptr->print_sprng(); - - gen = unif01_CreateExternGen01 ("SPRNG Double", genRanDbl); /* Create testU01 generator */ - - bbattery_Alphabit(gen, nbits, r, s); - - unif01_DeleteExternGen01 (gen); /* Delete testU01 generator */ - ptr->free_sprng(); /* free memory used to store stream state */ - - return 0; -} - \ No newline at end of file +#include +#include +#include + +#include "sprng_cpp.h" +extern "C" +{ +#include "unif01.h" +#include "bbattery.h" +} + +using namespace std; + +Sprng *ptr; + +/* Returns generated double-precision numbers for testU01 generator */ +double genRanDbl (void) +{ + return ptr->sprng (); +} + +int main (int argc, char *argv[]) +{ + int streamnum, nstreams; + int gtype, seed, param; + int nbits, r, s; + unif01_Gen *gen; + + if (argc < 2) + { + std::cout << "Usage: " << argv[0] + << " genType seed[optional] parameter[optional] nbits[optional, default=32] r[optional, default=0] s[optional, default=500]\n"; + return 1; + } + + gtype = atoi (argv[1]); + + if (argc > 2) + { + seed = atoi (argv[2]); + } + else + { + seed = 985456376; + } + + if (argc > 3) + { + param = atoi (argv[3]); + } + else + { + param = SPRNG_DEFAULT; + } + + if (argc > 4) + { + nbits = atoi (argv[4]); + } + else + { + nbits = 500; + } + + if (argc > 5) + { + r = atoi (argv[5]); + } + else + { + r = 0; + } + + if (argc > 6) + { + s = atoi (argv[6]); + } + else + { + s = 32; + } + + streamnum = 0; + nstreams = 1; + + ptr = SelectType (gtype); + ptr->init_sprng (streamnum, nstreams, seed, param); + + printf ("\n --------------------------------------------------------\n"); + printf (" Printing information about stream:\n"); + ptr->print_sprng (); + + gen = unif01_CreateExternGen01 ("SPRNG Double", genRanDbl); /* Create testU01 generator */ + + bbattery_Alphabit (gen, nbits, r, s); + + unif01_DeleteExternGen01 (gen); /* Delete testU01 generator */ + ptr->free_sprng (); /* free memory used to store stream state */ + + return 0; +} diff -urN sprng5.orig/TESTS/testu01/tu01_bigCrush.cpp sprng5/TESTS/testu01/tu01_bigCrush.cpp --- sprng5.orig/TESTS/testu01/tu01_bigCrush.cpp 2014-06-25 15:07:40.000000000 +0000 +++ sprng5/TESTS/testu01/tu01_bigCrush.cpp 2021-05-18 00:01:38.000000000 +0000 @@ -1,64 +1,73 @@ - #include - #include - #include - - #include "sprng_cpp.h" - extern "C" { - #include "unif01.h" - #include "bbattery.h" - } - - using namespace std; - - Sprng * ptr; - - /* Returns generated double-precision numbers for testU01 generator */ - double genRanDbl(void) { - return ptr->sprng(); - } - - - int main(int argc, char* argv[]) { - int streamnum, nstreams; - int gtype, seed, param; - unif01_Gen *gen; - - if (argc < 2) { - std::cout << "Usage: " << argv[0] << " genType seed[optional] parameter[optional]\n"; - return 1; - } - - gtype = atoi(argv[1]); - - if (argc > 2) { - seed = atoi(argv[2]); - } else { - seed = 985456376; - } - - if (argc > 3) { - param = atoi(argv[3]); - } else { - param = SPRNG_DEFAULT; - } - - streamnum = 0; - nstreams = 1; - - ptr = SelectType(gtype); - ptr->init_sprng(streamnum, nstreams, seed, param); - - printf("\n --------------------------------------------------------\n"); - printf(" Printing information about stream:\n"); - ptr->print_sprng(); - - gen = unif01_CreateExternGen01 ("SPRNG Double", genRanDbl); /* Create testU01 generator */ - - bbattery_BigCrush(gen); - - unif01_DeleteExternGen01 (gen); /* Delete testU01 generator */ - ptr->free_sprng(); /* free memory used to store stream state */ - - return 0; -} - \ No newline at end of file +#include +#include +#include + +#include "sprng_cpp.h" +extern "C" +{ +#include "unif01.h" +#include "bbattery.h" +} + +using namespace std; + +Sprng *ptr; + +/* Returns generated double-precision numbers for testU01 generator */ +double genRanDbl (void) +{ + return ptr->sprng (); +} + +int main (int argc, char *argv[]) +{ + int streamnum, nstreams; + int gtype, seed, param; + unif01_Gen *gen; + + if (argc < 2) + { + std::cout << "Usage: " << argv[0] + << " genType seed[optional] parameter[optional]\n"; + return 1; + } + + gtype = atoi (argv[1]); + + if (argc > 2) + { + seed = atoi (argv[2]); + } + else + { + seed = 985456376; + } + + if (argc > 3) + { + param = atoi (argv[3]); + } + else + { + param = SPRNG_DEFAULT; + } + + streamnum = 0; + nstreams = 1; + + ptr = SelectType (gtype); + ptr->init_sprng (streamnum, nstreams, seed, param); + + printf ("\n --------------------------------------------------------\n"); + printf (" Printing information about stream:\n"); + ptr->print_sprng (); + + gen = unif01_CreateExternGen01 ("SPRNG Double", genRanDbl); /* Create testU01 generator */ + + bbattery_BigCrush (gen); + + unif01_DeleteExternGen01 (gen); /* Delete testU01 generator */ + ptr->free_sprng (); /* free memory used to store stream state */ + + return 0; +} diff -urN sprng5.orig/TESTS/testu01/tu01_crush.cpp sprng5/TESTS/testu01/tu01_crush.cpp --- sprng5.orig/TESTS/testu01/tu01_crush.cpp 2014-06-25 15:08:04.000000000 +0000 +++ sprng5/TESTS/testu01/tu01_crush.cpp 2021-05-18 00:01:38.000000000 +0000 @@ -1,64 +1,73 @@ - #include - #include - #include - - #include "sprng_cpp.h" - extern "C" { - #include "unif01.h" - #include "bbattery.h" - } - - using namespace std; - - Sprng * ptr; - - /* Returns generated double-precision numbers for testU01 generator */ - double genRanDbl(void) { - return ptr->sprng(); - } - - - int main(int argc, char* argv[]) { - int streamnum, nstreams; - int gtype, seed, param; - unif01_Gen *gen; - - if (argc < 2) { - std::cout << "Usage: " << argv[0] << " genType seed[optional] parameter[optional]\n"; - return 1; - } - - gtype = atoi(argv[1]); - - if (argc > 2) { - seed = atoi(argv[2]); - } else { - seed = 985456376; - } - - if (argc > 3) { - param = atoi(argv[3]); - } else { - param = SPRNG_DEFAULT; - } - - streamnum = 0; - nstreams = 1; - - ptr = SelectType(gtype); - ptr->init_sprng(streamnum, nstreams, seed, param); - - printf("\n --------------------------------------------------------\n"); - printf(" Printing information about stream:\n"); - ptr->print_sprng(); - - gen = unif01_CreateExternGen01 ("SPRNG Double", genRanDbl); /* Create testU01 generator */ - - bbattery_Crush(gen); - - unif01_DeleteExternGen01 (gen); /* Delete testU01 generator */ - ptr->free_sprng(); /* free memory used to store stream state */ - - return 0; -} - \ No newline at end of file +#include +#include +#include + +#include "sprng_cpp.h" +extern "C" +{ +#include "unif01.h" +#include "bbattery.h" +} + +using namespace std; + +Sprng *ptr; + +/* Returns generated double-precision numbers for testU01 generator */ +double genRanDbl (void) +{ + return ptr->sprng (); +} + +int main (int argc, char *argv[]) +{ + int streamnum, nstreams; + int gtype, seed, param; + unif01_Gen *gen; + + if (argc < 2) + { + std::cout << "Usage: " << argv[0] + << " genType seed[optional] parameter[optional]\n"; + return 1; + } + + gtype = atoi (argv[1]); + + if (argc > 2) + { + seed = atoi (argv[2]); + } + else + { + seed = 985456376; + } + + if (argc > 3) + { + param = atoi (argv[3]); + } + else + { + param = SPRNG_DEFAULT; + } + + streamnum = 0; + nstreams = 1; + + ptr = SelectType (gtype); + ptr->init_sprng (streamnum, nstreams, seed, param); + + printf ("\n --------------------------------------------------------\n"); + printf (" Printing information about stream:\n"); + ptr->print_sprng (); + + gen = unif01_CreateExternGen01 ("SPRNG Double", genRanDbl); /* Create testU01 generator */ + + bbattery_Crush (gen); + + unif01_DeleteExternGen01 (gen); /* Delete testU01 generator */ + ptr->free_sprng (); /* free memory used to store stream state */ + + return 0; +} diff -urN sprng5.orig/TESTS/testu01/tu01_rabbit.cpp sprng5/TESTS/testu01/tu01_rabbit.cpp --- sprng5.orig/TESTS/testu01/tu01_rabbit.cpp 2014-06-25 15:30:25.000000000 +0000 +++ sprng5/TESTS/testu01/tu01_rabbit.cpp 2021-05-18 00:01:38.000000000 +0000 @@ -1,71 +1,83 @@ - #include - #include - #include - - #include "sprng_cpp.h" - extern "C" { - #include "unif01.h" - #include "bbattery.h" - } - - using namespace std; - - Sprng * ptr; - - /* Returns generated double-precision numbers for testU01 generator */ - double genRanDbl(void) { - return ptr->sprng(); - } - - - int main(int argc, char* argv[]) { - int streamnum, nstreams; - int gtype, seed, param; - int nbits; - unif01_Gen *gen; - - if (argc < 2) { - std::cout << "Usage: " << argv[0] << " genType seed[optional] parameter[optional] nbits[optional, default=500]\n"; - return 1; - } - - gtype = atoi(argv[1]); - - if (argc > 2) { - seed = atoi(argv[2]); - } else { - seed = 985456376; - } - - if (argc > 3) { - param = atoi(argv[3]); - } else { - param = SPRNG_DEFAULT; - } - - if (argc > 4) { - nbits = atoi(argv[4]); - } else { - nbits = 500; - } - - streamnum = 0; - nstreams = 1; - - ptr = SelectType(gtype); - ptr->init_sprng(streamnum, nstreams, seed, param); - - printf("\n --------------------------------------------------------\n"); - printf(" Printing information about stream:\n"); - ptr->print_sprng(); - - gen = unif01_CreateExternGen01 ("SPRNG Double", genRanDbl); /* Create testU01 generator */ - - bbattery_Rabbit(gen, nbits); - - unif01_DeleteExternGen01 (gen); /* Delete testU01 generator */ - ptr->free_sprng(); /* free memory used to store stream state */ - - return 0; -} - \ No newline at end of file +#include +#include +#include + +#include "sprng_cpp.h" +extern "C" +{ +#include "unif01.h" +#include "bbattery.h" +} + +using namespace std; + +Sprng *ptr; + +/* Returns generated double-precision numbers for testU01 generator */ +double genRanDbl (void) +{ + return ptr->sprng (); +} + +int main (int argc, char *argv[]) +{ + int streamnum, nstreams; + int gtype, seed, param; + int nbits; + unif01_Gen *gen; + + if (argc < 2) + { + std::cout << "Usage: " << argv[0] + << " genType seed[optional] parameter[optional] nbits[optional, default=500]\n"; + return 1; + } + + gtype = atoi (argv[1]); + + if (argc > 2) + { + seed = atoi (argv[2]); + } + else + { + seed = 985456376; + } + + if (argc > 3) + { + param = atoi (argv[3]); + } + else + { + param = SPRNG_DEFAULT; + } + + if (argc > 4) + { + nbits = atoi (argv[4]); + } + else + { + nbits = 500; + } + + streamnum = 0; + nstreams = 1; + + ptr = SelectType (gtype); + ptr->init_sprng (streamnum, nstreams, seed, param); + + printf ("\n --------------------------------------------------------\n"); + printf (" Printing information about stream:\n"); + ptr->print_sprng (); + + gen = unif01_CreateExternGen01 ("SPRNG Double", genRanDbl); /* Create testU01 generator */ + + bbattery_Rabbit (gen, nbits); + + unif01_DeleteExternGen01 (gen); /* Delete testU01 generator */ + ptr->free_sprng (); /* free memory used to store stream state */ + + return 0; +} diff -urN sprng5.orig/TESTS/testu01/tu01_smallCrush.cpp sprng5/TESTS/testu01/tu01_smallCrush.cpp --- sprng5.orig/TESTS/testu01/tu01_smallCrush.cpp 2014-06-25 14:49:32.000000000 +0000 +++ sprng5/TESTS/testu01/tu01_smallCrush.cpp 2021-05-18 00:01:38.000000000 +0000 @@ -1,64 +1,73 @@ - #include - #include - #include - - #include "sprng_cpp.h" - extern "C" { - #include "unif01.h" - #include "bbattery.h" - } - - using namespace std; - - Sprng * ptr; - - /* Returns generated double-precision numbers for testU01 generator */ - double genRanDbl(void) { - return ptr->sprng(); - } - - - int main(int argc, char* argv[]) { - int streamnum, nstreams; - int gtype, seed, param; - unif01_Gen *gen; - - if (argc < 2) { - std::cout << "Usage: " << argv[0] << " genType seed[optional] parameter[optional]\n"; - return 1; - } - - gtype = atoi(argv[1]); - - if (argc > 2) { - seed = atoi(argv[2]); - } else { - seed = 985456376; - } - - if (argc > 3) { - param = atoi(argv[3]); - } else { - param = SPRNG_DEFAULT; - } - - streamnum = 0; - nstreams = 1; - - ptr = SelectType(gtype); - ptr->init_sprng(streamnum, nstreams, seed, param); - - printf("\n --------------------------------------------------------\n"); - printf(" Printing information about stream:\n"); - ptr->print_sprng(); - - gen = unif01_CreateExternGen01 ("SPRNG Double", genRanDbl); /* Create testU01 generator */ - - bbattery_SmallCrush(gen); - - unif01_DeleteExternGen01 (gen); /* Delete testU01 generator */ - ptr->free_sprng(); /* free memory used to store stream state */ - - return 0; -} - \ No newline at end of file +#include +#include +#include + +#include "sprng_cpp.h" +extern "C" +{ +#include "unif01.h" +#include "bbattery.h" +} + +using namespace std; + +Sprng *ptr; + +/* Returns generated double-precision numbers for testU01 generator */ +double genRanDbl (void) +{ + return ptr->sprng (); +} + +int main (int argc, char *argv[]) +{ + int streamnum, nstreams; + int gtype, seed, param; + unif01_Gen *gen; + + if (argc < 2) + { + std::cout << "Usage: " << argv[0] + << " genType seed[optional] parameter[optional]\n"; + return 1; + } + + gtype = atoi (argv[1]); + + if (argc > 2) + { + seed = atoi (argv[2]); + } + else + { + seed = 985456376; + } + + if (argc > 3) + { + param = atoi (argv[3]); + } + else + { + param = SPRNG_DEFAULT; + } + + streamnum = 0; + nstreams = 1; + + ptr = SelectType (gtype); + ptr->init_sprng (streamnum, nstreams, seed, param); + + printf ("\n --------------------------------------------------------\n"); + printf (" Printing information about stream:\n"); + ptr->print_sprng (); + + gen = unif01_CreateExternGen01 ("SPRNG Double", genRanDbl); /* Create testU01 generator */ + + bbattery_SmallCrush (gen); + + unif01_DeleteExternGen01 (gen); /* Delete testU01 generator */ + ptr->free_sprng (); /* free memory used to store stream state */ + + return 0; +} diff -urN sprng5.orig/TESTS/util.cpp sprng5/TESTS/util.cpp --- sprng5.orig/TESTS/util.cpp 2006-09-30 00:43:56.000000000 +0000 +++ sprng5/TESTS/util.cpp 2021-01-15 16:37:38.000000000 +0000 @@ -4,21 +4,21 @@ using namespace std; -void *_mymalloc(size_t size, int line, char *message) +void* _mymalloc (size_t size, int line, char *message) { char *temp; - if(size == 0) + if (size == 0) return NULL; - temp = (char *) malloc(size); - - - if(temp == NULL) + temp = (char*) malloc (size); + + if (temp == NULL) { - printf("\nmemory allocation failure in file: %s at line number: %d\n", message, line); - exit(-1); + printf ("\nmemory allocation failure in file: %s at line number: %d\n", + message, line); + exit (-1); } - return (void *) temp; + return (void*) temp; } diff -urN sprng5.orig/TESTS/util.h sprng5/TESTS/util.h --- sprng5.orig/TESTS/util.h 2006-07-23 08:20:24.000000000 +0000 +++ sprng5/TESTS/util.h 2021-01-15 16:37:36.000000000 +0000 @@ -5,6 +5,6 @@ #define mymalloc(a) (_mymalloc((a), __LINE__, __FILE__)) -void *_mymalloc (size_t size, int line, char *message); +void* _mymalloc (size_t size, int line, char *message); #endif diff -urN sprng5.orig/TESTS/wolff.cpp sprng5/TESTS/wolff.cpp --- sprng5.orig/TESTS/wolff.cpp 2011-08-06 15:58:04.000000000 +0000 +++ sprng5/TESTS/wolff.cpp 2021-01-15 16:35:52.000000000 +0000 @@ -11,350 +11,349 @@ using namespace std; - /*#define PARALLEL*/ int lattice_size, *spin, *stack, nsites; -Sprng **genptr; /* array of random number generators */ +Sprng **genptr; /* array of random number generators */ int exponent, mask; /* Used for efficiency purposes */ double prob; -double Energy[10][10], Cv[10][10], J=0.4406868; -double exact_energy=-1.4530649029, exact_Cv=1.4987048885; /***** This is correct ONLY for a 16x16 lattice!!****** */ +double Energy[10][10], Cv[10][10], J = 0.4406868; +double exact_energy = -1.4530649029, exact_Cv = 1.4987048885; /***** This is correct ONLY for a 16x16 lattice!!****** */ -int RNG() /* Random number generator used for initializations alone */ +int RNG () /* Random number generator used for initializations alone */ { - static int seed=17; - seed=16807*(seed%127773)-(seed/127773)*2836; - if(seed<0) - seed+=2147483647; - else if(seed > 2147483647) - { - seed--; - seed -= 2147483647; - } - + static int seed = 17; + seed = 16807 * (seed % 127773) - (seed / 127773) * 2836; + if (seed < 0) + seed += 2147483647; + else if (seed > 2147483647) + { + seed--; + seed -= 2147483647; + } + return seed; } - -void Single_Cluster_Update(void) /* update lattice spins: a single sweep */ +void Single_Cluster_Update (void) /* update lattice spins: a single sweep */ { - static int nSite[4], Ipt=-1; + static int nSite[4], Ipt = -1; int i, j, nnJ, ix, iy; - - i = RNG()>>(31-(exponent<<1)); - if(i<0) - i += nsites; - spin[i] = -spin[i]; - - while(i >= 0) - { - /* ix=I/size; iy=I%size; */ - ix =i>>exponent; iy=i&mask; - /* printf("ix=%d, iy=%d) ", ix, iy); */ - if(iy==0) nSite[0]=(ix<sprng() > prob) - continue; - spin[nnJ]=-spin[nnJ]; - stack[++Ipt]=nnJ; - } - - if(Ipt>=0) - { - i=stack[Ipt]; - Ipt--; - } - else i=-1; - } -} + i = RNG () >> (31 - (exponent << 1)); + if (i < 0) + i += nsites; + spin[i] = -spin[i]; -int System_Energy() /* Compute energy of lattice */ + while (i >= 0) + { + /* ix=I/size; iy=I%size; */ + ix = i >> exponent; + iy = i & mask; + /* printf("ix=%d, iy=%d) ", ix, iy); */ + if (iy == 0) + nSite[0] = (ix << exponent) + mask; /* nSite[0]=ix*size+size-1; */ + else + nSite[0] = i - 1; + + if (iy == lattice_size - 1) + nSite[2] = ix << exponent; /* nSite[2]=ix*size; */ + else + nSite[2] = i + 1; + + if (ix == 0) + nSite[1] = (mask << exponent) + iy; /* nSite[1]=(size-1)*size+iy; */ + else + nSite[1] = i - lattice_size; + + if (ix == lattice_size - 1) + nSite[3] = iy; + else + nSite[3] = i + lattice_size; + + for (j = 0; j < 4; j++) + { + nnJ = nSite[j]; + if (spin[i] == spin[nnJ]) + continue; + /* notice prog should be scaled to MAXIMUM if necessary */ + if (genptr[i]->sprng () > prob) + continue; + spin[nnJ] = -spin[nnJ]; + stack[++Ipt] = nnJ; + } + + if (Ipt >= 0) + { + i = stack[Ipt]; + Ipt--; + } + else + i = -1; + } +} + +int System_Energy () /* Compute energy of lattice */ { - int E =0; + int E = 0; int i, j, s; - for(i=0, s=0; i=10*divisor) /* make scale logarithmic for printing results */ - { - divisor *= 10; - row++; - } - - col = i/divisor; - average_E /= divisor; - average_Cv /= divisor; - Energy[row][col] += average_E; - Cv[row][col] += average_Cv; + if (i >= 10 * divisor) /* make scale logarithmic for printing results */ + { + divisor *= 10; + row++; + } - for(k=row+1; k<10; k++) - { - average_E /= 10; - average_Cv /= 10; - Energy[k][0] += average_E; - Cv[k][0] += average_Cv; + col = i / divisor; + average_E /= divisor; + average_Cv /= divisor; + Energy[row][col] += average_E; + Cv[row][col] += average_Cv; + + for (k = row + 1; k < 10; k++) + { + average_E /= 10; + average_Cv /= 10; + Energy[k][0] += average_E; + Cv[k][0] += average_Cv; + } + + if (old_row != row) + { + compute (old_row); + old_row = row; + } } - - if(old_row != row) - { - compute(old_row); - old_row = row; - } - } - compute(old_row); + compute (old_row); } /*--- in order not to duplicate with initialize ---*/ /*--- change from initialize() to minitialize() ---*/ -void minitialize(int rng_type, int seed, int param, int use_blocks) +void minitialize (int rng_type, int seed, int param, int use_blocks) { int i, j, temp; - - nsites = lattice_size*lattice_size; - prob = 1 - exp(-2.0*J); - for(i=0; i<10; i++) - for(j=0; j<10; j++) + nsites = lattice_size * lattice_size; + prob = 1 - exp (-2.0 * J); + + for (i = 0; i < 10; i++) + for (j = 0; j < 10; j++) Energy[i][j] = Cv[i][j] = 0.0; - - spin = static_cast(malloc(nsites*sizeof(int))); - stack = static_cast(malloc(nsites*sizeof(int))); - if(!spin || !stack) - { - printf("\n\tMemory allocation failure, program exits!\n"); - exit(-1); - } + spin = static_cast (malloc (nsites * sizeof(int))); + stack = static_cast (malloc (nsites * sizeof(int))); + if (!spin || !stack) + { + printf ("\n\tMemory allocation failure, program exits!\n"); + exit (-1); + } - - for(i=0; iprob)?1:-1; + for (i = 0; i < nsites; i++) /* randomly initialize system */ + spin[i] = (RNG () > prob) ? 1 : -1; /* here assume that expo is integer exponent of 2 */ - temp = mask=lattice_size-1; - exponent = 0; /* expo = log_2(lattice_size) */ - while(temp) - { - exponent++; - temp >>= 1; - } - + temp = mask = lattice_size - 1; + exponent = 0; /* expo = log_2(lattice_size) */ + while (temp) + { + exponent++; + temp >>= 1; + } + /* initialize generator */ - genptr = (Sprng **) malloc(nsites*sizeof(Sprng *)); - genptr[0] = SelectType(rng_type); - genptr[0]->init_sprng(0,nsites,seed,param); /*--- add rng_type ---*/ - genptr[0]->print_sprng(); - for(i=1; iinit_sprng (0, nsites, seed, param); /*--- add rng_type ---*/ + genptr[0]->print_sprng (); + for (i = 1; i < nsites; i++) #ifdef PARALLEL genptr[i] = SelectType(rng_type); genptr[i]->init_sprng(i,nsites,seed,param); /*--- add rng_type ---*/ #else - genptr[i]=genptr[0]; + genptr[i] = genptr[0]; #endif } - -void check_arguments(int lattice_size, int block_size, int discard_blocks, - int use_blocks) +void check_arguments (int lattice_size, int block_size, int discard_blocks, + int use_blocks) { - if(lattice_size<=0) - { - printf("ERROR: lattice_size %d should be > 0\n", lattice_size); - exit(-1); - } - if(block_size<=0) - { - printf("ERROR: Block_size %d should be > 0\n", block_size); - exit(-1); - } - if(discard_blocks<=0) - { - printf("ERROR: discard_blocks %d should be > 0\n", discard_blocks); - exit(-1); - } - if(use_blocks<=0) - { - printf("ERROR: use_blocks %d should be > 0\n", use_blocks); - exit(-1); - } - if((lattice_size&(lattice_size-1)) != 0) /* check if lattice_size = 2^n */ - { - printf("ERROR: lattice_size %d should be a positive power of 2\n", - lattice_size); - exit(-1); - } - if(lattice_size!=16) - { - printf("WARNING: The current code gives error values correctly only for a 16x16 lattice.\n\t... The Energy_error and Cv_error columns are incorrect.\n\t... Please use the Energy and Cv values and compute error from the exact solution.\n"); - } - while(use_blocks) /* check if use_blocks is a power of 10 */ - { - if(use_blocks%10 != 0 && use_blocks!=1) + if (lattice_size <= 0) { - printf("ERROR: use_blocks %d should be a power of 10\n", use_blocks); - exit(-1); + printf ("ERROR: lattice_size %d should be > 0\n", lattice_size); + exit (-1); } - use_blocks /= 10; - } + if (block_size <= 0) + { + printf ("ERROR: Block_size %d should be > 0\n", block_size); + exit (-1); + } + if (discard_blocks <= 0) + { + printf ("ERROR: discard_blocks %d should be > 0\n", discard_blocks); + exit (-1); + } + if (use_blocks <= 0) + { + printf ("ERROR: use_blocks %d should be > 0\n", use_blocks); + exit (-1); + } + if ((lattice_size & (lattice_size - 1)) != 0) /* check if lattice_size = 2^n */ + { + printf ("ERROR: lattice_size %d should be a positive power of 2\n", + lattice_size); + exit (-1); + } + if (lattice_size != 16) + { + printf ( + "WARNING: The current code gives error values correctly only for a 16x16 lattice.\n\t... The Energy_error and Cv_error columns are incorrect.\n\t... Please use the Energy and Cv values and compute error from the exact solution.\n"); + } + while (use_blocks) /* check if use_blocks is a power of 10 */ + { + if (use_blocks % 10 != 0 && use_blocks != 1) + { + printf ("ERROR: use_blocks %d should be a power of 10\n", use_blocks); + exit (-1); + } + use_blocks /= 10; + } } - - - /************** 'Thermalize' system so that results are not influenced - by the initial conditions *************/ -void thermalize(int block_size, int discard_blocks) +/************** 'Thermalize' system so that results are not influenced + by the initial conditions *************/ +void thermalize (int block_size, int discard_blocks) { int i, j; - - for(i=0; i 2147483647) - { - seed--; - seed -= 2147483647; - } - + static int seed = 17; + seed = 16807 * (seed % 127773) - (seed / 127773) * 2836; + if (seed < 0) + seed += 2147483647; + else if (seed > 2147483647) + { + seed--; + seed -= 2147483647; + } + return seed; } -double LCG(int multi, int modul) /* Random number generator used for initializations alone */ +double LCG (int multi, int modul) /* Random number generator used for initializations alone */ { - static int seed=17; - seed=multi*(seed%modul)-(seed/modul)*2836; - if(seed<0) - seed+=2147483647; - else if(seed > 2147483647) - { - seed--; - seed -= 2147483647; - } - double rnd = (double)seed / (double)modul; /* normalize */ + static int seed = 17; + seed = multi * (seed % modul) - (seed / modul) * 2836; + if (seed < 0) + seed += 2147483647; + else if (seed > 2147483647) + { + seed--; + seed -= 2147483647; + } + double rnd = (double) seed / (double) modul; /* normalize */ //printf("LCG %d %f\n", seed, rnd); return rnd; } - -void Single_Cluster_Update(int multi, int modul) /* update lattice spins: a single sweep */ +void Single_Cluster_Update (int multi, int modul) /* update lattice spins: a single sweep */ { - static int nSite[4], Ipt=-1; + static int nSite[4], Ipt = -1; int i, j, nnJ, ix, iy; double ff; - - i = RNG()>>(31-(exponent<<1)); - if(i<0) - i += nsites; - spin[i] = -spin[i]; - - while(i >= 0) - { - /* ix=I/size; iy=I%size; */ - ix =i>>exponent; iy=i&mask; - /* printf("ix=%d, iy=%d) ", ix, iy); */ - if(iy==0) nSite[0]=(ix<sprng() > prob) - if (LCG(multi, modul) > prob) - continue; - spin[nnJ]=-spin[nnJ]; - stack[++Ipt]=nnJ; - } - - if(Ipt>=0) - { - i=stack[Ipt]; - Ipt--; - } - else i=-1; - } -} + i = RNG () >> (31 - (exponent << 1)); + if (i < 0) + i += nsites; + spin[i] = -spin[i]; -int System_Energy() /* Compute energy of lattice */ + while (i >= 0) + { + /* ix=I/size; iy=I%size; */ + ix = i >> exponent; + iy = i & mask; + /* printf("ix=%d, iy=%d) ", ix, iy); */ + if (iy == 0) + nSite[0] = (ix << exponent) + mask; /* nSite[0]=ix*size+size-1; */ + else + nSite[0] = i - 1; + + if (iy == lattice_size - 1) + nSite[2] = ix << exponent; /* nSite[2]=ix*size; */ + else + nSite[2] = i + 1; + + if (ix == 0) + nSite[1] = (mask << exponent) + iy; /* nSite[1]=(size-1)*size+iy; */ + else + nSite[1] = i - lattice_size; + + if (ix == lattice_size - 1) + nSite[3] = iy; + else + nSite[3] = i + lattice_size; + + for (j = 0; j < 4; j++) + { + nnJ = nSite[j]; + if (spin[i] == spin[nnJ]) + continue; + /* notice prog should be scaled to MAXIMUM if necessary */ + //if (genptr[i]->sprng() > prob) + if (LCG (multi, modul) > prob) + continue; + spin[nnJ] = -spin[nnJ]; + stack[++Ipt] = nnJ; + } + + if (Ipt >= 0) + { + i = stack[Ipt]; + Ipt--; + } + else + i = -1; + } +} + +int System_Energy () /* Compute energy of lattice */ { - int E =0; + int E = 0; int i, j, s, aa; - for(i=0, s=0; i=10*divisor) /* make scale logarithmic for printing results */ - { - divisor *= 10; - row++; - } - - col = i/divisor; - average_E /= divisor; - average_Cv /= divisor; - Energy[row][col] += average_E; - Cv[row][col] += average_Cv; + if (i >= 10 * divisor) /* make scale logarithmic for printing results */ + { + divisor *= 10; + row++; + } - for(k=row+1; k<10; k++) - { - average_E /= 10; - average_Cv /= 10; - Energy[k][0] += average_E; - Cv[k][0] += average_Cv; + col = i / divisor; + average_E /= divisor; + average_Cv /= divisor; + Energy[row][col] += average_E; + Cv[row][col] += average_Cv; + + for (k = row + 1; k < 10; k++) + { + average_E /= 10; + average_Cv /= 10; + Energy[k][0] += average_E; + Cv[k][0] += average_Cv; + } + + if (old_row != row) + { + compute (old_row, i * 10); + old_row = row; + } } - - if(old_row != row) - { - compute(old_row, i*10); - old_row = row; - } - } - compute(old_row, i*10); + compute (old_row, i * 10); } /*--- in order not to duplicate with initialize ---*/ /*--- change from initialize() to minitialize() ---*/ -void minitialize(int rng_type, int seed, int param, int model, int use_blocks) +void minitialize (int rng_type, int seed, int param, int model, int use_blocks) { int i, j, temp; - - nsites = lattice_size*lattice_size; - prob = 1 - exp(-2.0*J); - for(i=0; i<10; i++) - for(j=0; j<10; j++) + nsites = lattice_size * lattice_size; + prob = 1 - exp (-2.0 * J); + + for (i = 0; i < 10; i++) + for (j = 0; j < 10; j++) Energy[i][j] = Cv[i][j] = 0.0; - spin = static_cast(malloc(nsites*sizeof(int))); - stack = static_cast(malloc(nsites*sizeof(int))); - if(!spin || !stack) - { - printf("\n\tMemory allocation failure, program exits!\n"); - exit(-1); - } + spin = static_cast (malloc (nsites * sizeof(int))); + stack = static_cast (malloc (nsites * sizeof(int))); + if (!spin || !stack) + { + printf ("\n\tMemory allocation failure, program exits!\n"); + exit (-1); + } - - for(i=0; iprob)?1:-1; + for (i = 0; i < nsites; i++) /* randomly initialize system */ + spin[i] = (RNG () > prob) ? 1 : -1; /* here assume that expo is integer exponent of 2 */ - temp = mask=lattice_size-1; - exponent = 0; /* expo = log_2(lattice_size) */ - while(temp) - { - exponent++; - temp >>= 1; - } + temp = mask = lattice_size - 1; + exponent = 0; /* expo = log_2(lattice_size) */ + while (temp) + { + exponent++; + temp >>= 1; + } } - -void check_arguments(int lattice_size, int block_size, int discard_blocks, - int use_blocks, int modul) +void check_arguments (int lattice_size, int block_size, int discard_blocks, + int use_blocks, int modul) { - if(modul<=0) - { - printf("ERROR: modulus %d should be > 0\n", modul); - exit(-1); - } - if(lattice_size<=0) - { - printf("ERROR: lattice_size %d should be > 0\n", lattice_size); - exit(-1); - } - if(block_size<=0) - { - printf("ERROR: Block_size %d should be > 0\n", block_size); - exit(-1); - } - if(discard_blocks<=0) - { - printf("ERROR: discard_blocks %d should be > 0\n", discard_blocks); - exit(-1); - } - if(use_blocks<=0) - { - printf("ERROR: use_blocks %d should be > 0\n", use_blocks); - exit(-1); - } - if((lattice_size&(lattice_size-1)) != 0) /* check if lattice_size = 2^n */ - { - printf("ERROR: lattice_size %d should be a positive power of 2\n", - lattice_size); - exit(-1); - } - if(lattice_size!=16) - { - printf("WARNING: The current code gives error values correctly only for a 16x16 lattice.\n\t... The Energy_error and Cv_error columns are incorrect.\n\t... Please use the Energy and Cv values and compute error from the exact solution.\n"); - } - while(use_blocks) /* check if use_blocks is a power of 10 */ - { - if(use_blocks%10 != 0 && use_blocks!=1) + if (modul <= 0) { - printf("ERROR: use_blocks %d should be a power of 10\n", use_blocks); - exit(-1); + printf ("ERROR: modulus %d should be > 0\n", modul); + exit (-1); } - use_blocks /= 10; - } + if (lattice_size <= 0) + { + printf ("ERROR: lattice_size %d should be > 0\n", lattice_size); + exit (-1); + } + if (block_size <= 0) + { + printf ("ERROR: Block_size %d should be > 0\n", block_size); + exit (-1); + } + if (discard_blocks <= 0) + { + printf ("ERROR: discard_blocks %d should be > 0\n", discard_blocks); + exit (-1); + } + if (use_blocks <= 0) + { + printf ("ERROR: use_blocks %d should be > 0\n", use_blocks); + exit (-1); + } + if ((lattice_size & (lattice_size - 1)) != 0) /* check if lattice_size = 2^n */ + { + printf ("ERROR: lattice_size %d should be a positive power of 2\n", + lattice_size); + exit (-1); + } + if (lattice_size != 16) + { + printf ( + "WARNING: The current code gives error values correctly only for a 16x16 lattice.\n\t... The Energy_error and Cv_error columns are incorrect.\n\t... Please use the Energy and Cv values and compute error from the exact solution.\n"); + } + while (use_blocks) /* check if use_blocks is a power of 10 */ + { + if (use_blocks % 10 != 0 && use_blocks != 1) + { + printf ("ERROR: use_blocks %d should be a power of 10\n", use_blocks); + exit (-1); + } + use_blocks /= 10; + } } - - /************** 'Thermalize' system so that results are not influenced - by the initial conditions *************/ -void thermalize(int block_size, int discard_blocks, int multi, int modul) +/************** 'Thermalize' system so that results are not influenced + by the initial conditions *************/ +void thermalize (int block_size, int discard_blocks, int multi, int modul) { int i, j; - - for(i=0; i 2147483647) - { - seed--; - seed -= 2147483647; - } - + static int seed = 17; + seed = 16807 * (seed % 127773) - (seed / 127773) * 2836; + if (seed < 0) + seed += 2147483647; + else if (seed > 2147483647) + { + seed--; + seed -= 2147483647; + } + return seed; } - -void Single_Cluster_Update(void) /* update lattice spins: a single sweep */ +void Single_Cluster_Update (void) /* update lattice spins: a single sweep */ { - static int nSite[4], Ipt=-1; + static int nSite[4], Ipt = -1; int i, j, nnJ, ix, iy; double ff; - - i = RNG()>>(31-(exponent<<1)); - if(i<0) - i += nsites; - spin[i] = -spin[i]; - - while(i >= 0) - { - /* ix=I/size; iy=I%size; */ - ix =i>>exponent; iy=i&mask; - /* printf("ix=%d, iy=%d) ", ix, iy); */ - if(iy==0) nSite[0]=(ix<sprng() > prob) - continue; - spin[nnJ]=-spin[nnJ]; - stack[++Ipt]=nnJ; - } - - if(Ipt>=0) - { - i=stack[Ipt]; - Ipt--; - } - else i=-1; - } -} + i = RNG () >> (31 - (exponent << 1)); + if (i < 0) + i += nsites; + spin[i] = -spin[i]; -int System_Energy() /* Compute energy of lattice */ + while (i >= 0) + { + /* ix=I/size; iy=I%size; */ + ix = i >> exponent; + iy = i & mask; + /* printf("ix=%d, iy=%d) ", ix, iy); */ + if (iy == 0) + nSite[0] = (ix << exponent) + mask; /* nSite[0]=ix*size+size-1; */ + else + nSite[0] = i - 1; + + if (iy == lattice_size - 1) + nSite[2] = ix << exponent; /* nSite[2]=ix*size; */ + else + nSite[2] = i + 1; + + if (ix == 0) + nSite[1] = (mask << exponent) + iy; /* nSite[1]=(size-1)*size+iy; */ + else + nSite[1] = i - lattice_size; + + if (ix == lattice_size - 1) + nSite[3] = iy; + else + nSite[3] = i + lattice_size; + + for (j = 0; j < 4; j++) + { + nnJ = nSite[j]; + if (spin[i] == spin[nnJ]) + continue; + /* notice prog should be scaled to MAXIMUM if necessary */ + if (genptr[i]->sprng () > prob) + continue; + spin[nnJ] = -spin[nnJ]; + stack[++Ipt] = nnJ; + } + + if (Ipt >= 0) + { + i = stack[Ipt]; + Ipt--; + } + else + i = -1; + } +} + +int System_Energy () /* Compute energy of lattice */ { - int E =0; + int E = 0; int i, j, s, aa; - for(i=0, s=0; i=10*divisor) /* make scale logarithmic for printing results */ - { - divisor *= 10; - row++; - } - - col = i/divisor; - average_E /= divisor; - average_Cv /= divisor; - Energy[row][col] += average_E; - Cv[row][col] += average_Cv; + if (i >= 10 * divisor) /* make scale logarithmic for printing results */ + { + divisor *= 10; + row++; + } - for(k=row+1; k<10; k++) - { - average_E /= 10; - average_Cv /= 10; - Energy[k][0] += average_E; - Cv[k][0] += average_Cv; + col = i / divisor; + average_E /= divisor; + average_Cv /= divisor; + Energy[row][col] += average_E; + Cv[row][col] += average_Cv; + + for (k = row + 1; k < 10; k++) + { + average_E /= 10; + average_Cv /= 10; + Energy[k][0] += average_E; + Cv[k][0] += average_Cv; + } + + if (old_row != row) + { + compute (old_row); + old_row = row; + } } - - if(old_row != row) - { - compute(old_row); - old_row = row; - } - } - compute(old_row); + compute (old_row); } /*--- in order not to duplicate with initialize ---*/ /*--- change from initialize() to minitialize() ---*/ -void minitialize(int rng_type, int seed, int param, int use_blocks) +void minitialize (int rng_type, int seed, int param, int use_blocks) { int i, j, temp; - - nsites = lattice_size*lattice_size; - prob = 1 - exp(-2.0*J); - for(i=0; i<10; i++) - for(j=0; j<10; j++) + nsites = lattice_size * lattice_size; + prob = 1 - exp (-2.0 * J); + + for (i = 0; i < 10; i++) + for (j = 0; j < 10; j++) Energy[i][j] = Cv[i][j] = 0.0; - - spin = static_cast(malloc(nsites*sizeof(int))); - stack = static_cast(malloc(nsites*sizeof(int))); - if(!spin || !stack) - { - printf("\n\tMemory allocation failure, program exits!\n"); - exit(-1); - } + spin = static_cast (malloc (nsites * sizeof(int))); + stack = static_cast (malloc (nsites * sizeof(int))); + if (!spin || !stack) + { + printf ("\n\tMemory allocation failure, program exits!\n"); + exit (-1); + } - - for(i=0; iprob)?1:-1; + for (i = 0; i < nsites; i++) /* randomly initialize system */ + spin[i] = (RNG () > prob) ? 1 : -1; /* here assume that expo is integer exponent of 2 */ - temp = mask=lattice_size-1; - exponent = 0; /* expo = log_2(lattice_size) */ - while(temp) - { - exponent++; - temp >>= 1; - } - + temp = mask = lattice_size - 1; + exponent = 0; /* expo = log_2(lattice_size) */ + while (temp) + { + exponent++; + temp >>= 1; + } + /* initialize generator */ - genptr = (Sprng **) malloc(nsites*sizeof(Sprng *)); - genptr[0] = SelectType(rng_type); - genptr[0]->init_sprng(0,nsites,seed,param); /*--- add rng_type ---*/ + genptr = (Sprng**) malloc (nsites * sizeof(Sprng*)); + genptr[0] = SelectType (rng_type); + genptr[0]->init_sprng (0, nsites, seed, param); /*--- add rng_type ---*/ //genptr[0]->init_rng_simple(seed,param,2); /*--- add rng_type ---*/ - genptr[0]->print_sprng(); - for(i=1; iprint_sprng (); + for (i = 1; i < nsites; i++) #ifdef PARALLEL genptr[i] = SelectType(rng_type); genptr[i]->init_sprng(i,nsites,seed,param); /*--- add rng_type ---*/ #else - genptr[i]=genptr[0]; + genptr[i] = genptr[0]; #endif } /* int *init_rng_sprng (int seed, int mult, int gtype = 0); - Initialize SPRNG and return pointer to memory location. + Initialize SPRNG and return pointer to memory location. - int isprng(); - double sprng(); - Return the next random number. -*/ + int isprng(); + double sprng(); + Return the next random number. + */ -void check_arguments(int lattice_size, int block_size, int discard_blocks, - int use_blocks) +void check_arguments (int lattice_size, int block_size, int discard_blocks, + int use_blocks) { - if(lattice_size<=0) - { - printf("ERROR: lattice_size %d should be > 0\n", lattice_size); - exit(-1); - } - if(block_size<=0) - { - printf("ERROR: Block_size %d should be > 0\n", block_size); - exit(-1); - } - if(discard_blocks<=0) - { - printf("ERROR: discard_blocks %d should be > 0\n", discard_blocks); - exit(-1); - } - if(use_blocks<=0) - { - printf("ERROR: use_blocks %d should be > 0\n", use_blocks); - exit(-1); - } - if((lattice_size&(lattice_size-1)) != 0) /* check if lattice_size = 2^n */ - { - printf("ERROR: lattice_size %d should be a positive power of 2\n", - lattice_size); - exit(-1); - } - if(lattice_size!=16) - { - printf("WARNING: The current code gives error values correctly only for a 16x16 lattice.\n\t... The Energy_error and Cv_error columns are incorrect.\n\t... Please use the Energy and Cv values and compute error from the exact solution.\n"); - } - while(use_blocks) /* check if use_blocks is a power of 10 */ - { - if(use_blocks%10 != 0 && use_blocks!=1) + if (lattice_size <= 0) { - printf("ERROR: use_blocks %d should be a power of 10\n", use_blocks); - exit(-1); + printf ("ERROR: lattice_size %d should be > 0\n", lattice_size); + exit (-1); } - use_blocks /= 10; - } + if (block_size <= 0) + { + printf ("ERROR: Block_size %d should be > 0\n", block_size); + exit (-1); + } + if (discard_blocks <= 0) + { + printf ("ERROR: discard_blocks %d should be > 0\n", discard_blocks); + exit (-1); + } + if (use_blocks <= 0) + { + printf ("ERROR: use_blocks %d should be > 0\n", use_blocks); + exit (-1); + } + if ((lattice_size & (lattice_size - 1)) != 0) /* check if lattice_size = 2^n */ + { + printf ("ERROR: lattice_size %d should be a positive power of 2\n", + lattice_size); + exit (-1); + } + if (lattice_size != 16) + { + printf ( + "WARNING: The current code gives error values correctly only for a 16x16 lattice.\n\t... The Energy_error and Cv_error columns are incorrect.\n\t... Please use the Energy and Cv values and compute error from the exact solution.\n"); + } + while (use_blocks) /* check if use_blocks is a power of 10 */ + { + if (use_blocks % 10 != 0 && use_blocks != 1) + { + printf ("ERROR: use_blocks %d should be a power of 10\n", use_blocks); + exit (-1); + } + use_blocks /= 10; + } } - - - /************** 'Thermalize' system so that results are not influenced - by the initial conditions *************/ -void thermalize(int block_size, int discard_blocks) +/************** 'Thermalize' system so that results are not influenced + by the initial conditions *************/ +void thermalize (int block_size, int discard_blocks) { int i, j; - - for(i=0; i`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -626,7 +626,7 @@ fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2014 Free Software Foundation, Inc. +# Copyright (C) 2003-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -647,7 +647,7 @@ # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -697,7 +697,7 @@ # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2014 Free Software Foundation, Inc. +# Copyright (C) 1997-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -738,7 +738,7 @@ # Obsolete and "removed" macros, that must however still report explicit # error messages when used, to smooth transition. # -# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# Copyright (C) 1996-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -765,7 +765,7 @@ # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -794,7 +794,7 @@ AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# Copyright (C) 1999-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -841,7 +841,7 @@ # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -860,7 +860,7 @@ # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# Copyright (C) 1996-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -941,7 +941,7 @@ rm -f conftest.file ]) -# Copyright (C) 2009-2014 Free Software Foundation, Inc. +# Copyright (C) 2009-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1001,7 +1001,7 @@ _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1029,7 +1029,7 @@ INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2014 Free Software Foundation, Inc. +# Copyright (C) 2006-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1048,7 +1048,7 @@ # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2014 Free Software Foundation, Inc. +# Copyright (C) 2004-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff -urN sprng5.orig/autom4te.cache/output.0 sprng5/autom4te.cache/output.0 --- sprng5.orig/autom4te.cache/output.0 2018-07-21 20:24:28.000000000 +0000 +++ sprng5/autom4te.cache/output.0 2021-06-08 16:40:15.000000000 +0000 @@ -634,6 +634,7 @@ USE_TESTU01_TRUE TESTU01_INCDIR TESTU01_LIBDIR +MPI_CXXLIB MPI_DEF USE_MPI_FALSE USE_MPI_TRUE @@ -3397,7 +3398,7 @@ if test "${with_fortran+set}" = set; then : withval=$with_fortran; with_fortran=$withval else - with_fortran=yes + with_fortran=no fi @@ -6529,9 +6530,12 @@ if test $use_mpi = y; then MPI_DEF="-DSPRNG_MPI" + MPI_CXXLIB="-lmpi_cxx" else MPI_DEF="" + MPI_CXXLIB="" fi + diff -urN sprng5.orig/autom4te.cache/output.1 sprng5/autom4te.cache/output.1 --- sprng5.orig/autom4te.cache/output.1 2018-07-21 19:48:25.000000000 +0000 +++ sprng5/autom4te.cache/output.1 2021-06-08 16:40:19.000000000 +0000 @@ -634,6 +634,7 @@ USE_TESTU01_TRUE TESTU01_INCDIR TESTU01_LIBDIR +MPI_CXXLIB MPI_DEF USE_MPI_FALSE USE_MPI_TRUE @@ -3397,7 +3398,7 @@ if test "${with_fortran+set}" = set; then : withval=$with_fortran; with_fortran=$withval else - with_fortran=yes + with_fortran=no fi @@ -6529,9 +6530,12 @@ if test $use_mpi = y; then MPI_DEF="-DSPRNG_MPI" + MPI_CXXLIB="-lmpi_cxx" else MPI_DEF="" + MPI_CXXLIB="" fi + diff -urN sprng5.orig/autom4te.cache/requests sprng5/autom4te.cache/requests --- sprng5.orig/autom4te.cache/requests 2018-07-21 22:22:04.000000000 +0000 +++ sprng5/autom4te.cache/requests 2021-06-08 16:52:47.000000000 +0000 @@ -1,4 +1,4 @@ -# This file was generated by Autom4te Fri Oct 23 20:57:39 UTC 2015. +# This file was generated by Autom4te Sun Aug 20 23:09:08 UTC 2017. # It contains the lists of macros which have been traced. # It can be safely removed. @@ -37,55 +37,55 @@ 'configure.ac' ], { - '_AM_IF_OPTION' => 1, - '_AM_OUTPUT_DEPENDENCY_COMMANDS' => 1, + 'AM_SET_DEPDIR' => 1, 'AU_DEFUN' => 1, - 'AC_CONFIG_MACRO_DIR_TRACE' => 1, - 'AX_PROG_F77_MPI' => 1, - 'AM_PROG_CC_STDC' => 1, - '_AX_PROG_CXX_MPI' => 1, - '_AX_PROG_F77_MPI' => 1, - 'AM_SANITY_CHECK' => 1, - 'AM_CONFIG_HEADER' => 1, - '_AM_SET_OPTION' => 1, - '_AM_MANGLE_OPTION' => 1, - 'AM_RUN_LOG' => 1, - '_AC_AM_CONFIG_HEADER_HOOK' => 1, - 'AM_MISSING_HAS_RUN' => 1, - '_AM_SET_OPTIONS' => 1, + 'AC_DEFUN' => 1, 'AM_CONDITIONAL' => 1, - 'AM_PROG_CC_C_O' => 1, - 'm4_pattern_allow' => 1, - '_AM_CONFIG_MACRO_DIRS' => 1, + '_AM_SET_OPTIONS' => 1, + '_AX_PROG_CXX_MPI' => 1, + 'AM_PROG_INSTALL_STRIP' => 1, + 'AM_OUTPUT_DEPENDENCY_COMMANDS' => 1, + 'AC_DEFUN_ONCE' => 1, 'AM_SET_CURRENT_AUTOMAKE_VERSION' => 1, - 'AM_DEP_TRACK' => 1, 'AC_CONFIG_MACRO_DIR' => 1, - '_AM_SUBST_NOTMAKE' => 1, - 'AM_C_PROTOTYPES' => 1, - 'AM_MAKE_INCLUDE' => 1, '_AM_AUTOCONF_VERSION' => 1, - 'include' => 1, - 'AM_SILENT_RULES' => 1, - 'AM_PROG_INSTALL_STRIP' => 1, - 'AM_AUTOMAKE_VERSION' => 1, - 'AM_SET_DEPDIR' => 1, - 'AC_DEFUN_ONCE' => 1, - 'AM_AUX_DIR_EXPAND' => 1, + '_AM_MANGLE_OPTION' => 1, 'AM_SET_LEADING_DOT' => 1, - 'AM_MISSING_PROG' => 1, - '_AM_DEPENDENCIES' => 1, - 'AM_PROG_INSTALL_SH' => 1, + '_AM_PROG_TAR' => 1, + '_AX_PROG_F77_MPI' => 1, + 'AM_MISSING_HAS_RUN' => 1, + 'AM_INIT_AUTOMAKE' => 1, + 'AM_SANITY_CHECK' => 1, 'AM_SUBST_NOTMAKE' => 1, + 'AM_MISSING_PROG' => 1, + 'AM_PROG_CC_STDC' => 1, + 'AM_AUTOMAKE_VERSION' => 1, '_AM_PROG_CC_C_O' => 1, + '_AM_IF_OPTION' => 1, + '_AM_CONFIG_MACRO_DIRS' => 1, 'm4_include' => 1, - 'AX_PROG_CXX_MPI' => 1, - 'AM_INIT_AUTOMAKE' => 1, - 'fp_C_PROTOTYPES' => 1, + 'AM_PROG_CC_C_O' => 1, + '_AC_AM_CONFIG_HEADER_HOOK' => 1, + 'AM_SILENT_RULES' => 1, + '_AM_SUBST_NOTMAKE' => 1, 'm4_pattern_forbid' => 1, - '_AM_PROG_TAR' => 1, + 'AC_CONFIG_MACRO_DIR_TRACE' => 1, + 'AM_PROG_INSTALL_SH' => 1, + 'm4_pattern_allow' => 1, + '_AM_OUTPUT_DEPENDENCY_COMMANDS' => 1, '_m4_warn' => 1, - 'AC_DEFUN' => 1, - 'AM_OUTPUT_DEPENDENCY_COMMANDS' => 1 + '_AM_DEPENDENCIES' => 1, + 'AM_C_PROTOTYPES' => 1, + 'fp_C_PROTOTYPES' => 1, + '_AM_SET_OPTION' => 1, + 'AM_AUX_DIR_EXPAND' => 1, + 'AM_MAKE_INCLUDE' => 1, + 'AX_PROG_F77_MPI' => 1, + 'AM_RUN_LOG' => 1, + 'include' => 1, + 'AM_CONFIG_HEADER' => 1, + 'AX_PROG_CXX_MPI' => 1, + 'AM_DEP_TRACK' => 1 } ], 'Autom4te::Request' ), bless( [ @@ -100,75 +100,66 @@ 'configure.ac' ], { - 'AC_CANONICAL_SYSTEM' => 1, - 'AM_EXTRA_RECURSIVE_TARGETS' => 1, + 'AM_PROG_MKDIR_P' => 1, + 'AC_FC_FREEFORM' => 1, 'AC_CONFIG_AUX_DIR' => 1, - 'AC_CANONICAL_BUILD' => 1, - 'AC_TYPE_SIZE_T' => 1, + 'AC_FC_PP_SRCEXT' => 1, + 'AH_OUTPUT' => 1, 'include' => 1, - 'AM_GNU_GETTEXT' => 1, - 'AC_FC_PP_DEFINE' => 1, - 'AM_SILENT_RULES' => 1, - 'AC_PROG_CC' => 1, + 'm4_sinclude' => 1, + 'AM_EXTRA_RECURSIVE_TARGETS' => 1, + 'LT_INIT' => 1, + 'AC_DEFINE_TRACE_LITERAL' => 1, + 'AC_CANONICAL_SYSTEM' => 1, + 'AC_CONFIG_HEADERS' => 1, 'AM_PATH_GUILE' => 1, + 'AM_AUTOMAKE_VERSION' => 1, + 'AM_PROG_F77_C_O' => 1, 'AM_PROG_AR' => 1, - 'AM_GNU_GETTEXT_INTL_SUBDIR' => 1, + 'AC_INIT' => 1, 'm4_include' => 1, - 'AC_CONFIG_LINKS' => 1, - '_LT_AC_TAGCONFIG' => 1, - 'LT_CONFIG_LTDL_DIR' => 1, + 'AM_PROG_CC_C_O' => 1, + 'AM_SILENT_RULES' => 1, + 'AC_PROG_LIBTOOL' => 1, + 'AC_CANONICAL_TARGET' => 1, + 'sinclude' => 1, + 'AC_CANONICAL_HOST' => 1, + 'AM_GNU_GETTEXT_INTL_SUBDIR' => 1, + '_AM_SUBST_NOTMAKE' => 1, + 'm4_pattern_forbid' => 1, + 'm4_pattern_allow' => 1, 'AM_POT_TOOLS' => 1, + 'AC_REQUIRE_AUX_FILE' => 1, 'AM_MAINTAINER_MODE' => 1, + '_m4_warn' => 1, + 'AC_FC_PP_DEFINE' => 1, 'AM_PROG_FC_C_O' => 1, - 'LT_SUPPORTED_TAG' => 1, - 'AC_SUBST_TRACE' => 1, - '_AM_COND_ELSE' => 1, + 'AM_ENABLE_MULTILIB' => 1, 'AC_CONFIG_SUBDIRS' => 1, + 'AM_NLS' => 1, + 'AM_PROG_MOC' => 1, + '_AM_MAKEFILE_INCLUDE' => 1, + 'AC_LIBSOURCE' => 1, + 'AM_INIT_AUTOMAKE' => 1, + 'LT_CONFIG_LTDL_DIR' => 1, '_AM_COND_ENDIF' => 1, + '_AM_COND_ELSE' => 1, 'AC_CONFIG_FILES' => 1, - 'AC_REQUIRE_AUX_FILE' => 1, - 'AC_CANONICAL_HOST' => 1, - '_AM_SUBST_NOTMAKE' => 1, - 'm4_pattern_allow' => 1, - 'AM_PROG_LIBTOOL' => 1, - 'AC_PREREQ' => 1, - 'AC_C_INLINE' => 1, - 'AC_PROG_CXX' => 1, - 'AC_SUBST' => 1, - 'sinclude' => 1, - 'AM_PROG_CXX_C_O' => 1, - 'AC_INIT' => 1, - 'AM_PROG_MOC' => 1, - 'AC_FC_SRCEXT' => 1, - 'LT_INIT' => 1, - 'AM_ENABLE_MULTILIB' => 1, - 'AC_CANONICAL_TARGET' => 1, + 'AM_GNU_GETTEXT' => 1, + '_LT_AC_TAGCONFIG' => 1, 'AM_XGETTEXT_OPTION' => 1, - 'AM_AUTOMAKE_VERSION' => 1, - 'AC_CHECK_HEADERS' => 1, - 'AM_PROG_MKDIR_P' => 1, - '_m4_warn' => 1, - 'AM_NLS' => 1, - 'AC_FC_PP_SRCEXT' => 1, - 'AM_INIT_AUTOMAKE' => 1, - 'm4_pattern_forbid' => 1, - 'AC_FUNC_MALLOC' => 1, - 'AC_DEFINE_TRACE_LITERAL' => 1, - 'm4_sinclude' => 1, - '_AM_COND_IF' => 1, - 'AC_FC_FREEFORM' => 1, - 'AC_PROG_LIBTOOL' => 1, - 'AH_OUTPUT' => 1, - 'AC_LIBSOURCE' => 1, - 'AC_CONFIG_LIBOBJ_DIR' => 1, - 'AC_CONFIG_HEADERS' => 1, + 'AC_SUBST_TRACE' => 1, 'AM_MAKEFILE_INCLUDE' => 1, - 'AC_CHECK_FUNCS' => 1, - '_AM_MAKEFILE_INCLUDE' => 1, - 'AC_CHECK_HEADER_STDBOOL' => 1, - 'AM_PROG_F77_C_O' => 1, - 'AM_PROG_CC_C_O' => 1, - 'AM_CONDITIONAL' => 1 + 'AM_CONDITIONAL' => 1, + 'AC_CANONICAL_BUILD' => 1, + 'AM_PROG_LIBTOOL' => 1, + 'AC_CONFIG_LINKS' => 1, + 'AC_CONFIG_LIBOBJ_DIR' => 1, + '_AM_COND_IF' => 1, + 'LT_SUPPORTED_TAG' => 1, + 'AC_FC_SRCEXT' => 1, + 'AC_SUBST' => 1, + 'AM_PROG_CXX_C_O' => 1 } ], 'Autom4te::Request' ) ); diff -urN sprng5.orig/autom4te.cache/traces.0 sprng5/autom4te.cache/traces.0 --- sprng5.orig/autom4te.cache/traces.0 2018-07-21 20:24:28.000000000 +0000 +++ sprng5/autom4te.cache/traces.0 2021-06-08 16:40:15.000000000 +0000 @@ -1,10 +1,10 @@ m4trace:/usr/share/aclocal-1.15/amversion.m4:14: -1- AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.15' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.15], [], +m4_if([$1], [1.15.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) -m4trace:/usr/share/aclocal-1.15/amversion.m4:33: -1- AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.15])dnl +m4trace:/usr/share/aclocal-1.15/amversion.m4:33: -1- AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.15.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) @@ -996,7 +996,7 @@ m4trace:configure.ac:10: -1- AM_INIT_AUTOMAKE([]) m4trace:configure.ac:10: -1- m4_pattern_allow([^AM_[A-Z]+FLAGS$]) m4trace:configure.ac:10: -1- AM_SET_CURRENT_AUTOMAKE_VERSION -m4trace:configure.ac:10: -1- AM_AUTOMAKE_VERSION([1.15]) +m4trace:configure.ac:10: -1- AM_AUTOMAKE_VERSION([1.15.1]) m4trace:configure.ac:10: -1- _AM_AUTOCONF_VERSION([2.69]) m4trace:configure.ac:10: -1- m4_pattern_allow([^INSTALL_PROGRAM$]) m4trace:configure.ac:10: -1- m4_pattern_allow([^INSTALL_SCRIPT$]) @@ -1188,81 +1188,82 @@ m4trace:configure.ac:88: -1- m4_pattern_allow([^USE_MPI_FALSE$]) m4trace:configure.ac:88: -1- _AM_SUBST_NOTMAKE([USE_MPI_TRUE]) m4trace:configure.ac:88: -1- _AM_SUBST_NOTMAKE([USE_MPI_FALSE]) -m4trace:configure.ac:96: -1- m4_pattern_allow([^MPI_DEF$]) -m4trace:configure.ac:98: -1- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +m4trace:configure.ac:98: -1- m4_pattern_allow([^MPI_DEF$]) +m4trace:configure.ac:99: -1- m4_pattern_allow([^MPI_CXXLIB$]) +m4trace:configure.ac:101: -1- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from... ../../lib/autoconf/general.m4:1492: AC_ARG_WITH is expanded from... -configure.ac:98: the top level]) -m4trace:configure.ac:108: -1- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +configure.ac:101: the top level]) +m4trace:configure.ac:111: -1- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from... ../../lib/autoconf/general.m4:1492: AC_ARG_WITH is expanded from... -configure.ac:108: the top level]) -m4trace:configure.ac:110: -1- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +configure.ac:111: the top level]) +m4trace:configure.ac:113: -1- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from... ../../lib/autoconf/general.m4:1492: AC_ARG_WITH is expanded from... -configure.ac:110: the top level]) -m4trace:configure.ac:120: -1- m4_pattern_allow([^TESTU01_LIBDIR$]) -m4trace:configure.ac:121: -1- m4_pattern_allow([^TESTU01_INCDIR$]) -m4trace:configure.ac:123: -1- AM_CONDITIONAL([USE_TESTU01], [test "$use_testu01" = "y"]) -m4trace:configure.ac:123: -1- m4_pattern_allow([^USE_TESTU01_TRUE$]) -m4trace:configure.ac:123: -1- m4_pattern_allow([^USE_TESTU01_FALSE$]) -m4trace:configure.ac:123: -1- _AM_SUBST_NOTMAKE([USE_TESTU01_TRUE]) -m4trace:configure.ac:123: -1- _AM_SUBST_NOTMAKE([USE_TESTU01_FALSE]) -m4trace:configure.ac:136: -1- AM_CONDITIONAL([compile_FORTRAN], [test "$use_fortran" = "y"]) -m4trace:configure.ac:136: -1- m4_pattern_allow([^compile_FORTRAN_TRUE$]) -m4trace:configure.ac:136: -1- m4_pattern_allow([^compile_FORTRAN_FALSE$]) -m4trace:configure.ac:136: -1- _AM_SUBST_NOTMAKE([compile_FORTRAN_TRUE]) -m4trace:configure.ac:136: -1- _AM_SUBST_NOTMAKE([compile_FORTRAN_FALSE]) -m4trace:configure.ac:142: -1- AM_CONDITIONAL([FFT], [test $fft = "yes"]) -m4trace:configure.ac:142: -1- m4_pattern_allow([^FFT_TRUE$]) -m4trace:configure.ac:142: -1- m4_pattern_allow([^FFT_FALSE$]) -m4trace:configure.ac:142: -1- _AM_SUBST_NOTMAKE([FFT_TRUE]) -m4trace:configure.ac:142: -1- _AM_SUBST_NOTMAKE([FFT_FALSE]) -m4trace:configure.ac:144: -1- m4_pattern_allow([^WORDS_BIGENDIAN$]) -m4trace:configure.ac:144: -1- m4_pattern_allow([^AC_APPLE_UNIVERSAL_BUILD$]) -m4trace:configure.ac:147: -1- m4_pattern_allow([^SIZEOF_INT_P$]) -m4trace:configure.ac:156: -1- m4_pattern_allow([^FFPSIZE$]) -m4trace:configure.ac:157: -1- m4_pattern_allow([^FMANGLE$]) -m4trace:configure.ac:159: -1- m4_pattern_allow([^SIZEOF_DOUBLE$]) -m4trace:configure.ac:160: -1- m4_pattern_allow([^SIZEOF_FLOAT$]) -m4trace:configure.ac:168: -1- m4_pattern_allow([^F77_DUMMY_MAIN$]) -m4trace:configure.ac:168: -1- m4_pattern_allow([^FC_DUMMY_MAIN_EQ_F77$]) -m4trace:configure.ac:168: -1- m4_pattern_allow([^F77_FUNC$]) -m4trace:configure.ac:168: -1- m4_pattern_allow([^F77_FUNC_$]) -m4trace:configure.ac:168: -1- m4_pattern_allow([^F77_FUNC$]) -m4trace:configure.ac:168: -1- m4_pattern_allow([^F77_FUNC_$]) -m4trace:configure.ac:168: -1- m4_pattern_allow([^F77_FUNC$]) -m4trace:configure.ac:168: -1- m4_pattern_allow([^F77_FUNC_$]) -m4trace:configure.ac:168: -1- m4_pattern_allow([^F77_FUNC$]) -m4trace:configure.ac:168: -1- m4_pattern_allow([^F77_FUNC_$]) -m4trace:configure.ac:168: -1- m4_pattern_allow([^F77_FUNC$]) -m4trace:configure.ac:168: -1- m4_pattern_allow([^F77_FUNC_$]) -m4trace:configure.ac:168: -1- m4_pattern_allow([^F77_FUNC$]) -m4trace:configure.ac:168: -1- m4_pattern_allow([^F77_FUNC_$]) -m4trace:configure.ac:168: -1- m4_pattern_allow([^F77_FUNC$]) -m4trace:configure.ac:168: -1- m4_pattern_allow([^F77_FUNC_$]) -m4trace:configure.ac:168: -1- m4_pattern_allow([^F77_FUNC$]) -m4trace:configure.ac:168: -1- m4_pattern_allow([^F77_FUNC_$]) -m4trace:configure.ac:171: -1- m4_pattern_allow([^FORTRANDIR$]) -m4trace:configure.ac:174: -1- m4_pattern_allow([^HAVE__BOOL$]) -m4trace:configure.ac:174: -1- m4_pattern_allow([^HAVE_STDBOOL_H$]) -m4trace:configure.ac:175: -1- m4_pattern_allow([^const$]) -m4trace:configure.ac:177: -1- m4_pattern_allow([^size_t$]) -m4trace:configure.ac:178: -1- m4_pattern_allow([^TM_IN_SYS_TIME$]) -m4trace:configure.ac:181: -1- m4_pattern_allow([^HAVE_STDLIB_H$]) -m4trace:configure.ac:181: -1- m4_pattern_allow([^HAVE_MALLOC$]) -m4trace:configure.ac:181: -1- m4_pattern_allow([^HAVE_MALLOC$]) -m4trace:configure.ac:181: -1- m4_pattern_allow([^LIB@&t@OBJS$]) -m4trace:configure.ac:181: -1- m4_pattern_allow([^malloc$]) -m4trace:configure.ac:182: -1- m4_pattern_allow([^LIB@&t@OBJS$]) -m4trace:configure.ac:186: -1- _m4_warn([obsolete], [AC_OUTPUT should be used without arguments. +configure.ac:113: the top level]) +m4trace:configure.ac:123: -1- m4_pattern_allow([^TESTU01_LIBDIR$]) +m4trace:configure.ac:124: -1- m4_pattern_allow([^TESTU01_INCDIR$]) +m4trace:configure.ac:126: -1- AM_CONDITIONAL([USE_TESTU01], [test "$use_testu01" = "y"]) +m4trace:configure.ac:126: -1- m4_pattern_allow([^USE_TESTU01_TRUE$]) +m4trace:configure.ac:126: -1- m4_pattern_allow([^USE_TESTU01_FALSE$]) +m4trace:configure.ac:126: -1- _AM_SUBST_NOTMAKE([USE_TESTU01_TRUE]) +m4trace:configure.ac:126: -1- _AM_SUBST_NOTMAKE([USE_TESTU01_FALSE]) +m4trace:configure.ac:139: -1- AM_CONDITIONAL([compile_FORTRAN], [test "$use_fortran" = "y"]) +m4trace:configure.ac:139: -1- m4_pattern_allow([^compile_FORTRAN_TRUE$]) +m4trace:configure.ac:139: -1- m4_pattern_allow([^compile_FORTRAN_FALSE$]) +m4trace:configure.ac:139: -1- _AM_SUBST_NOTMAKE([compile_FORTRAN_TRUE]) +m4trace:configure.ac:139: -1- _AM_SUBST_NOTMAKE([compile_FORTRAN_FALSE]) +m4trace:configure.ac:145: -1- AM_CONDITIONAL([FFT], [test $fft = "yes"]) +m4trace:configure.ac:145: -1- m4_pattern_allow([^FFT_TRUE$]) +m4trace:configure.ac:145: -1- m4_pattern_allow([^FFT_FALSE$]) +m4trace:configure.ac:145: -1- _AM_SUBST_NOTMAKE([FFT_TRUE]) +m4trace:configure.ac:145: -1- _AM_SUBST_NOTMAKE([FFT_FALSE]) +m4trace:configure.ac:147: -1- m4_pattern_allow([^WORDS_BIGENDIAN$]) +m4trace:configure.ac:147: -1- m4_pattern_allow([^AC_APPLE_UNIVERSAL_BUILD$]) +m4trace:configure.ac:150: -1- m4_pattern_allow([^SIZEOF_INT_P$]) +m4trace:configure.ac:159: -1- m4_pattern_allow([^FFPSIZE$]) +m4trace:configure.ac:160: -1- m4_pattern_allow([^FMANGLE$]) +m4trace:configure.ac:162: -1- m4_pattern_allow([^SIZEOF_DOUBLE$]) +m4trace:configure.ac:163: -1- m4_pattern_allow([^SIZEOF_FLOAT$]) +m4trace:configure.ac:171: -1- m4_pattern_allow([^F77_DUMMY_MAIN$]) +m4trace:configure.ac:171: -1- m4_pattern_allow([^FC_DUMMY_MAIN_EQ_F77$]) +m4trace:configure.ac:171: -1- m4_pattern_allow([^F77_FUNC$]) +m4trace:configure.ac:171: -1- m4_pattern_allow([^F77_FUNC_$]) +m4trace:configure.ac:171: -1- m4_pattern_allow([^F77_FUNC$]) +m4trace:configure.ac:171: -1- m4_pattern_allow([^F77_FUNC_$]) +m4trace:configure.ac:171: -1- m4_pattern_allow([^F77_FUNC$]) +m4trace:configure.ac:171: -1- m4_pattern_allow([^F77_FUNC_$]) +m4trace:configure.ac:171: -1- m4_pattern_allow([^F77_FUNC$]) +m4trace:configure.ac:171: -1- m4_pattern_allow([^F77_FUNC_$]) +m4trace:configure.ac:171: -1- m4_pattern_allow([^F77_FUNC$]) +m4trace:configure.ac:171: -1- m4_pattern_allow([^F77_FUNC_$]) +m4trace:configure.ac:171: -1- m4_pattern_allow([^F77_FUNC$]) +m4trace:configure.ac:171: -1- m4_pattern_allow([^F77_FUNC_$]) +m4trace:configure.ac:171: -1- m4_pattern_allow([^F77_FUNC$]) +m4trace:configure.ac:171: -1- m4_pattern_allow([^F77_FUNC_$]) +m4trace:configure.ac:171: -1- m4_pattern_allow([^F77_FUNC$]) +m4trace:configure.ac:171: -1- m4_pattern_allow([^F77_FUNC_$]) +m4trace:configure.ac:174: -1- m4_pattern_allow([^FORTRANDIR$]) +m4trace:configure.ac:177: -1- m4_pattern_allow([^HAVE__BOOL$]) +m4trace:configure.ac:177: -1- m4_pattern_allow([^HAVE_STDBOOL_H$]) +m4trace:configure.ac:178: -1- m4_pattern_allow([^const$]) +m4trace:configure.ac:180: -1- m4_pattern_allow([^size_t$]) +m4trace:configure.ac:181: -1- m4_pattern_allow([^TM_IN_SYS_TIME$]) +m4trace:configure.ac:184: -1- m4_pattern_allow([^HAVE_STDLIB_H$]) +m4trace:configure.ac:184: -1- m4_pattern_allow([^HAVE_MALLOC$]) +m4trace:configure.ac:184: -1- m4_pattern_allow([^HAVE_MALLOC$]) +m4trace:configure.ac:184: -1- m4_pattern_allow([^LIB@&t@OBJS$]) +m4trace:configure.ac:184: -1- m4_pattern_allow([^malloc$]) +m4trace:configure.ac:185: -1- m4_pattern_allow([^LIB@&t@OBJS$]) +m4trace:configure.ac:189: -1- _m4_warn([obsolete], [AC_OUTPUT should be used without arguments. You should run autoupdate.], []) -m4trace:configure.ac:186: -1- m4_pattern_allow([^LIB@&t@OBJS$]) -m4trace:configure.ac:186: -1- m4_pattern_allow([^LTLIBOBJS$]) -m4trace:configure.ac:186: -1- AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"]) -m4trace:configure.ac:186: -1- m4_pattern_allow([^am__EXEEXT_TRUE$]) -m4trace:configure.ac:186: -1- m4_pattern_allow([^am__EXEEXT_FALSE$]) -m4trace:configure.ac:186: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_TRUE]) -m4trace:configure.ac:186: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_FALSE]) -m4trace:configure.ac:186: -1- _AC_AM_CONFIG_HEADER_HOOK(["$ac_file"]) -m4trace:configure.ac:186: -1- _AM_OUTPUT_DEPENDENCY_COMMANDS +m4trace:configure.ac:189: -1- m4_pattern_allow([^LIB@&t@OBJS$]) +m4trace:configure.ac:189: -1- m4_pattern_allow([^LTLIBOBJS$]) +m4trace:configure.ac:189: -1- AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"]) +m4trace:configure.ac:189: -1- m4_pattern_allow([^am__EXEEXT_TRUE$]) +m4trace:configure.ac:189: -1- m4_pattern_allow([^am__EXEEXT_FALSE$]) +m4trace:configure.ac:189: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_TRUE]) +m4trace:configure.ac:189: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_FALSE]) +m4trace:configure.ac:189: -1- _AC_AM_CONFIG_HEADER_HOOK(["$ac_file"]) +m4trace:configure.ac:189: -1- _AM_OUTPUT_DEPENDENCY_COMMANDS diff -urN sprng5.orig/autom4te.cache/traces.1 sprng5/autom4te.cache/traces.1 --- sprng5.orig/autom4te.cache/traces.1 2018-07-21 19:48:25.000000000 +0000 +++ sprng5/autom4te.cache/traces.1 2021-06-08 16:40:19.000000000 +0000 @@ -197,9 +197,8 @@ m4trace:configure.ac:6: -1- AC_SUBST_TRACE([target_os]) m4trace:configure.ac:6: -1- m4_pattern_allow([^target_os$]) m4trace:configure.ac:10: -1- AM_INIT_AUTOMAKE([]) -m4trace:configure.ac:10: -1- AC_PREREQ([2.65]) m4trace:configure.ac:10: -1- m4_pattern_allow([^AM_[A-Z]+FLAGS$]) -m4trace:configure.ac:10: -1- AM_AUTOMAKE_VERSION([1.15]) +m4trace:configure.ac:10: -1- AM_AUTOMAKE_VERSION([1.15.1]) m4trace:configure.ac:10: -1- AC_REQUIRE_AUX_FILE([install-sh]) m4trace:configure.ac:10: -1- AC_SUBST([INSTALL_PROGRAM]) m4trace:configure.ac:10: -1- AC_SUBST_TRACE([INSTALL_PROGRAM]) @@ -321,7 +320,6 @@ You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from... ../../lib/autoconf/general.m4:1492: AC_ARG_WITH is expanded from... configure.ac:30: the top level]) -m4trace:configure.ac:40: -1- AC_PREREQ([2.50]) m4trace:configure.ac:40: -1- AC_SUBST([MPICXX]) m4trace:configure.ac:40: -1- AC_SUBST_TRACE([MPICXX]) m4trace:configure.ac:40: -1- m4_pattern_allow([^MPICXX$]) @@ -331,7 +329,6 @@ m4trace:configure.ac:40: -1- AC_SUBST([ac_ct_CXX]) m4trace:configure.ac:40: -1- AC_SUBST_TRACE([ac_ct_CXX]) m4trace:configure.ac:40: -1- m4_pattern_allow([^ac_ct_CXX$]) -m4trace:configure.ac:40: -1- AC_PROG_CXX m4trace:configure.ac:40: -1- AC_SUBST([CXX]) m4trace:configure.ac:40: -1- AC_SUBST_TRACE([CXX]) m4trace:configure.ac:40: -1- m4_pattern_allow([^CXX$]) @@ -369,7 +366,6 @@ m4trace:configure.ac:40: -1- AC_SUBST_TRACE([am__quote]) m4trace:configure.ac:40: -1- m4_pattern_allow([^am__quote$]) m4trace:configure.ac:40: -1- AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) -m4trace:configure.ac:40: -1- AC_PREREQ([2.52]) m4trace:configure.ac:40: -1- AC_SUBST([AMDEP_TRUE]) m4trace:configure.ac:40: -1- AC_SUBST_TRACE([AMDEP_TRUE]) m4trace:configure.ac:40: -1- m4_pattern_allow([^AMDEP_TRUE$]) @@ -392,7 +388,6 @@ m4trace:configure.ac:40: -1- AM_CONDITIONAL([am__fastdepCXX], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3]) -m4trace:configure.ac:40: -1- AC_PREREQ([2.52]) m4trace:configure.ac:40: -1- AC_SUBST([am__fastdepCXX_TRUE]) m4trace:configure.ac:40: -1- AC_SUBST_TRACE([am__fastdepCXX_TRUE]) m4trace:configure.ac:40: -1- m4_pattern_allow([^am__fastdepCXX_TRUE$]) @@ -401,7 +396,6 @@ m4trace:configure.ac:40: -1- m4_pattern_allow([^am__fastdepCXX_FALSE$]) m4trace:configure.ac:40: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_TRUE]) m4trace:configure.ac:40: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_FALSE]) -m4trace:configure.ac:48: -1- AC_PROG_CC m4trace:configure.ac:48: -1- AC_SUBST([CC]) m4trace:configure.ac:48: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:48: -1- m4_pattern_allow([^CC$]) @@ -439,7 +433,6 @@ m4trace:configure.ac:48: -1- AM_CONDITIONAL([am__fastdepCC], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3]) -m4trace:configure.ac:48: -1- AC_PREREQ([2.52]) m4trace:configure.ac:48: -1- AC_SUBST([am__fastdepCC_TRUE]) m4trace:configure.ac:48: -1- AC_SUBST_TRACE([am__fastdepCC_TRUE]) m4trace:configure.ac:48: -1- m4_pattern_allow([^am__fastdepCC_TRUE$]) @@ -457,7 +450,6 @@ m4trace:configure.ac:49: -1- AC_SUBST([CPP]) m4trace:configure.ac:49: -1- AC_SUBST_TRACE([CPP]) m4trace:configure.ac:49: -1- m4_pattern_allow([^CPP$]) -m4trace:configure.ac:51: -1- AC_PREREQ([2.50]) m4trace:configure.ac:51: -1- AC_SUBST([MPIF77]) m4trace:configure.ac:51: -1- AC_SUBST_TRACE([MPIF77]) m4trace:configure.ac:51: -1- m4_pattern_allow([^MPIF77$]) @@ -514,7 +506,6 @@ m4trace:configure.ac:77: -1- m4_pattern_allow([^STDC_HEADERS$]) m4trace:configure.ac:77: -1- AH_OUTPUT([STDC_HEADERS], [/* Define to 1 if you have the ANSI C header files. */ @%:@undef STDC_HEADERS]) -m4trace:configure.ac:78: -1- AC_CHECK_HEADERS([limits.h stddef.h stdlib.h string.h sys/time.h]) m4trace:configure.ac:78: -1- AH_OUTPUT([HAVE_LIMITS_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_LIMITS_H]) m4trace:configure.ac:78: -1- AH_OUTPUT([HAVE_STDDEF_H], [/* Define to 1 if you have the header file. */ @@ -525,8 +516,6 @@ @%:@undef HAVE_STRING_H]) m4trace:configure.ac:78: -1- AH_OUTPUT([HAVE_SYS_TIME_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_SYS_TIME_H]) -m4trace:configure.ac:78: -1- AC_CHECK_HEADERS([sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h], [], [], [$ac_includes_default]) m4trace:configure.ac:78: -1- AH_OUTPUT([HAVE_SYS_TYPES_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_SYS_TYPES_H]) m4trace:configure.ac:78: -1- AH_OUTPUT([HAVE_SYS_STAT_H], [/* Define to 1 if you have the header file. */ @@ -550,7 +539,6 @@ m4trace:configure.ac:80: -1- AH_OUTPUT([SIZEOF_LONG_INT], [/* The size of `long int\', as computed by sizeof. */ @%:@undef SIZEOF_LONG_INT]) m4trace:configure.ac:88: -1- AM_CONDITIONAL([USE_MPI], [test $use_mpi = y]) -m4trace:configure.ac:88: -1- AC_PREREQ([2.52]) m4trace:configure.ac:88: -1- AC_SUBST([USE_MPI_TRUE]) m4trace:configure.ac:88: -1- AC_SUBST_TRACE([USE_MPI_TRUE]) m4trace:configure.ac:88: -1- m4_pattern_allow([^USE_MPI_TRUE$]) @@ -559,58 +547,58 @@ m4trace:configure.ac:88: -1- m4_pattern_allow([^USE_MPI_FALSE$]) m4trace:configure.ac:88: -1- _AM_SUBST_NOTMAKE([USE_MPI_TRUE]) m4trace:configure.ac:88: -1- _AM_SUBST_NOTMAKE([USE_MPI_FALSE]) -m4trace:configure.ac:96: -1- AC_SUBST([MPI_DEF]) -m4trace:configure.ac:96: -1- AC_SUBST_TRACE([MPI_DEF]) -m4trace:configure.ac:96: -1- m4_pattern_allow([^MPI_DEF$]) -m4trace:configure.ac:98: -1- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +m4trace:configure.ac:98: -1- AC_SUBST([MPI_DEF]) +m4trace:configure.ac:98: -1- AC_SUBST_TRACE([MPI_DEF]) +m4trace:configure.ac:98: -1- m4_pattern_allow([^MPI_DEF$]) +m4trace:configure.ac:99: -1- AC_SUBST([MPI_CXXLIB]) +m4trace:configure.ac:99: -1- AC_SUBST_TRACE([MPI_CXXLIB]) +m4trace:configure.ac:99: -1- m4_pattern_allow([^MPI_CXXLIB$]) +m4trace:configure.ac:101: -1- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from... ../../lib/autoconf/general.m4:1492: AC_ARG_WITH is expanded from... -configure.ac:98: the top level]) -m4trace:configure.ac:108: -1- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +configure.ac:101: the top level]) +m4trace:configure.ac:111: -1- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from... ../../lib/autoconf/general.m4:1492: AC_ARG_WITH is expanded from... -configure.ac:108: the top level]) -m4trace:configure.ac:110: -1- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +configure.ac:111: the top level]) +m4trace:configure.ac:113: -1- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from... ../../lib/autoconf/general.m4:1492: AC_ARG_WITH is expanded from... -configure.ac:110: the top level]) -m4trace:configure.ac:120: -1- AC_SUBST([TESTU01_LIBDIR]) -m4trace:configure.ac:120: -1- AC_SUBST_TRACE([TESTU01_LIBDIR]) -m4trace:configure.ac:120: -1- m4_pattern_allow([^TESTU01_LIBDIR$]) -m4trace:configure.ac:121: -1- AC_SUBST([TESTU01_INCDIR]) -m4trace:configure.ac:121: -1- AC_SUBST_TRACE([TESTU01_INCDIR]) -m4trace:configure.ac:121: -1- m4_pattern_allow([^TESTU01_INCDIR$]) -m4trace:configure.ac:123: -1- AM_CONDITIONAL([USE_TESTU01], [test "$use_testu01" = "y"]) -m4trace:configure.ac:123: -1- AC_PREREQ([2.52]) -m4trace:configure.ac:123: -1- AC_SUBST([USE_TESTU01_TRUE]) -m4trace:configure.ac:123: -1- AC_SUBST_TRACE([USE_TESTU01_TRUE]) -m4trace:configure.ac:123: -1- m4_pattern_allow([^USE_TESTU01_TRUE$]) -m4trace:configure.ac:123: -1- AC_SUBST([USE_TESTU01_FALSE]) -m4trace:configure.ac:123: -1- AC_SUBST_TRACE([USE_TESTU01_FALSE]) -m4trace:configure.ac:123: -1- m4_pattern_allow([^USE_TESTU01_FALSE$]) -m4trace:configure.ac:123: -1- _AM_SUBST_NOTMAKE([USE_TESTU01_TRUE]) -m4trace:configure.ac:123: -1- _AM_SUBST_NOTMAKE([USE_TESTU01_FALSE]) -m4trace:configure.ac:136: -1- AM_CONDITIONAL([compile_FORTRAN], [test "$use_fortran" = "y"]) -m4trace:configure.ac:136: -1- AC_PREREQ([2.52]) -m4trace:configure.ac:136: -1- AC_SUBST([compile_FORTRAN_TRUE]) -m4trace:configure.ac:136: -1- AC_SUBST_TRACE([compile_FORTRAN_TRUE]) -m4trace:configure.ac:136: -1- m4_pattern_allow([^compile_FORTRAN_TRUE$]) -m4trace:configure.ac:136: -1- AC_SUBST([compile_FORTRAN_FALSE]) -m4trace:configure.ac:136: -1- AC_SUBST_TRACE([compile_FORTRAN_FALSE]) -m4trace:configure.ac:136: -1- m4_pattern_allow([^compile_FORTRAN_FALSE$]) -m4trace:configure.ac:136: -1- _AM_SUBST_NOTMAKE([compile_FORTRAN_TRUE]) -m4trace:configure.ac:136: -1- _AM_SUBST_NOTMAKE([compile_FORTRAN_FALSE]) -m4trace:configure.ac:142: -1- AM_CONDITIONAL([FFT], [test $fft = "yes"]) -m4trace:configure.ac:142: -1- AC_PREREQ([2.52]) -m4trace:configure.ac:142: -1- AC_SUBST([FFT_TRUE]) -m4trace:configure.ac:142: -1- AC_SUBST_TRACE([FFT_TRUE]) -m4trace:configure.ac:142: -1- m4_pattern_allow([^FFT_TRUE$]) -m4trace:configure.ac:142: -1- AC_SUBST([FFT_FALSE]) -m4trace:configure.ac:142: -1- AC_SUBST_TRACE([FFT_FALSE]) -m4trace:configure.ac:142: -1- m4_pattern_allow([^FFT_FALSE$]) -m4trace:configure.ac:142: -1- _AM_SUBST_NOTMAKE([FFT_TRUE]) -m4trace:configure.ac:142: -1- _AM_SUBST_NOTMAKE([FFT_FALSE]) -m4trace:configure.ac:144: -1- AH_OUTPUT([WORDS_BIGENDIAN], [/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most +configure.ac:113: the top level]) +m4trace:configure.ac:123: -1- AC_SUBST([TESTU01_LIBDIR]) +m4trace:configure.ac:123: -1- AC_SUBST_TRACE([TESTU01_LIBDIR]) +m4trace:configure.ac:123: -1- m4_pattern_allow([^TESTU01_LIBDIR$]) +m4trace:configure.ac:124: -1- AC_SUBST([TESTU01_INCDIR]) +m4trace:configure.ac:124: -1- AC_SUBST_TRACE([TESTU01_INCDIR]) +m4trace:configure.ac:124: -1- m4_pattern_allow([^TESTU01_INCDIR$]) +m4trace:configure.ac:126: -1- AM_CONDITIONAL([USE_TESTU01], [test "$use_testu01" = "y"]) +m4trace:configure.ac:126: -1- AC_SUBST([USE_TESTU01_TRUE]) +m4trace:configure.ac:126: -1- AC_SUBST_TRACE([USE_TESTU01_TRUE]) +m4trace:configure.ac:126: -1- m4_pattern_allow([^USE_TESTU01_TRUE$]) +m4trace:configure.ac:126: -1- AC_SUBST([USE_TESTU01_FALSE]) +m4trace:configure.ac:126: -1- AC_SUBST_TRACE([USE_TESTU01_FALSE]) +m4trace:configure.ac:126: -1- m4_pattern_allow([^USE_TESTU01_FALSE$]) +m4trace:configure.ac:126: -1- _AM_SUBST_NOTMAKE([USE_TESTU01_TRUE]) +m4trace:configure.ac:126: -1- _AM_SUBST_NOTMAKE([USE_TESTU01_FALSE]) +m4trace:configure.ac:139: -1- AM_CONDITIONAL([compile_FORTRAN], [test "$use_fortran" = "y"]) +m4trace:configure.ac:139: -1- AC_SUBST([compile_FORTRAN_TRUE]) +m4trace:configure.ac:139: -1- AC_SUBST_TRACE([compile_FORTRAN_TRUE]) +m4trace:configure.ac:139: -1- m4_pattern_allow([^compile_FORTRAN_TRUE$]) +m4trace:configure.ac:139: -1- AC_SUBST([compile_FORTRAN_FALSE]) +m4trace:configure.ac:139: -1- AC_SUBST_TRACE([compile_FORTRAN_FALSE]) +m4trace:configure.ac:139: -1- m4_pattern_allow([^compile_FORTRAN_FALSE$]) +m4trace:configure.ac:139: -1- _AM_SUBST_NOTMAKE([compile_FORTRAN_TRUE]) +m4trace:configure.ac:139: -1- _AM_SUBST_NOTMAKE([compile_FORTRAN_FALSE]) +m4trace:configure.ac:145: -1- AM_CONDITIONAL([FFT], [test $fft = "yes"]) +m4trace:configure.ac:145: -1- AC_SUBST([FFT_TRUE]) +m4trace:configure.ac:145: -1- AC_SUBST_TRACE([FFT_TRUE]) +m4trace:configure.ac:145: -1- m4_pattern_allow([^FFT_TRUE$]) +m4trace:configure.ac:145: -1- AC_SUBST([FFT_FALSE]) +m4trace:configure.ac:145: -1- AC_SUBST_TRACE([FFT_FALSE]) +m4trace:configure.ac:145: -1- m4_pattern_allow([^FFT_FALSE$]) +m4trace:configure.ac:145: -1- _AM_SUBST_NOTMAKE([FFT_TRUE]) +m4trace:configure.ac:145: -1- _AM_SUBST_NOTMAKE([FFT_FALSE]) +m4trace:configure.ac:147: -1- AH_OUTPUT([WORDS_BIGENDIAN], [/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel). */ #if defined AC_APPLE_UNIVERSAL_BUILD # if defined __BIG_ENDIAN__ @@ -621,140 +609,134 @@ # undef WORDS_BIGENDIAN # endif #endif]) -m4trace:configure.ac:144: -1- AC_DEFINE_TRACE_LITERAL([WORDS_BIGENDIAN]) -m4trace:configure.ac:144: -1- m4_pattern_allow([^WORDS_BIGENDIAN$]) -m4trace:configure.ac:144: -1- AC_DEFINE_TRACE_LITERAL([AC_APPLE_UNIVERSAL_BUILD]) -m4trace:configure.ac:144: -1- m4_pattern_allow([^AC_APPLE_UNIVERSAL_BUILD$]) -m4trace:configure.ac:144: -1- AH_OUTPUT([AC_APPLE_UNIVERSAL_BUILD], [/* Define if building universal (internal helper macro) */ +m4trace:configure.ac:147: -1- AC_DEFINE_TRACE_LITERAL([WORDS_BIGENDIAN]) +m4trace:configure.ac:147: -1- m4_pattern_allow([^WORDS_BIGENDIAN$]) +m4trace:configure.ac:147: -1- AC_DEFINE_TRACE_LITERAL([AC_APPLE_UNIVERSAL_BUILD]) +m4trace:configure.ac:147: -1- m4_pattern_allow([^AC_APPLE_UNIVERSAL_BUILD$]) +m4trace:configure.ac:147: -1- AH_OUTPUT([AC_APPLE_UNIVERSAL_BUILD], [/* Define if building universal (internal helper macro) */ @%:@undef AC_APPLE_UNIVERSAL_BUILD]) -m4trace:configure.ac:147: -1- AC_DEFINE_TRACE_LITERAL([SIZEOF_INT_P]) -m4trace:configure.ac:147: -1- m4_pattern_allow([^SIZEOF_INT_P$]) -m4trace:configure.ac:147: -1- AH_OUTPUT([SIZEOF_INT_P], [/* The size of `int *\', as computed by sizeof. */ +m4trace:configure.ac:150: -1- AC_DEFINE_TRACE_LITERAL([SIZEOF_INT_P]) +m4trace:configure.ac:150: -1- m4_pattern_allow([^SIZEOF_INT_P$]) +m4trace:configure.ac:150: -1- AH_OUTPUT([SIZEOF_INT_P], [/* The size of `int *\', as computed by sizeof. */ @%:@undef SIZEOF_INT_P]) -m4trace:configure.ac:156: -1- AC_SUBST([FFPSIZE]) -m4trace:configure.ac:156: -1- AC_SUBST_TRACE([FFPSIZE]) -m4trace:configure.ac:156: -1- m4_pattern_allow([^FFPSIZE$]) -m4trace:configure.ac:157: -1- AC_SUBST([FMANGLE]) -m4trace:configure.ac:157: -1- AC_SUBST_TRACE([FMANGLE]) -m4trace:configure.ac:157: -1- m4_pattern_allow([^FMANGLE$]) -m4trace:configure.ac:159: -1- AC_DEFINE_TRACE_LITERAL([SIZEOF_DOUBLE]) -m4trace:configure.ac:159: -1- m4_pattern_allow([^SIZEOF_DOUBLE$]) -m4trace:configure.ac:159: -1- AH_OUTPUT([SIZEOF_DOUBLE], [/* The size of `double\', as computed by sizeof. */ +m4trace:configure.ac:159: -1- AC_SUBST([FFPSIZE]) +m4trace:configure.ac:159: -1- AC_SUBST_TRACE([FFPSIZE]) +m4trace:configure.ac:159: -1- m4_pattern_allow([^FFPSIZE$]) +m4trace:configure.ac:160: -1- AC_SUBST([FMANGLE]) +m4trace:configure.ac:160: -1- AC_SUBST_TRACE([FMANGLE]) +m4trace:configure.ac:160: -1- m4_pattern_allow([^FMANGLE$]) +m4trace:configure.ac:162: -1- AC_DEFINE_TRACE_LITERAL([SIZEOF_DOUBLE]) +m4trace:configure.ac:162: -1- m4_pattern_allow([^SIZEOF_DOUBLE$]) +m4trace:configure.ac:162: -1- AH_OUTPUT([SIZEOF_DOUBLE], [/* The size of `double\', as computed by sizeof. */ @%:@undef SIZEOF_DOUBLE]) -m4trace:configure.ac:160: -1- AC_DEFINE_TRACE_LITERAL([SIZEOF_FLOAT]) -m4trace:configure.ac:160: -1- m4_pattern_allow([^SIZEOF_FLOAT$]) -m4trace:configure.ac:160: -1- AH_OUTPUT([SIZEOF_FLOAT], [/* The size of `float\', as computed by sizeof. */ +m4trace:configure.ac:163: -1- AC_DEFINE_TRACE_LITERAL([SIZEOF_FLOAT]) +m4trace:configure.ac:163: -1- m4_pattern_allow([^SIZEOF_FLOAT$]) +m4trace:configure.ac:163: -1- AH_OUTPUT([SIZEOF_FLOAT], [/* The size of `float\', as computed by sizeof. */ @%:@undef SIZEOF_FLOAT]) -m4trace:configure.ac:168: -1- AC_DEFINE_TRACE_LITERAL([F77_DUMMY_MAIN]) -m4trace:configure.ac:168: -1- m4_pattern_allow([^F77_DUMMY_MAIN$]) -m4trace:configure.ac:168: -1- AH_OUTPUT([F77_DUMMY_MAIN], [/* Define to dummy `main\' function (if any) required to link to the Fortran +m4trace:configure.ac:171: -1- AC_DEFINE_TRACE_LITERAL([F77_DUMMY_MAIN]) +m4trace:configure.ac:171: -1- m4_pattern_allow([^F77_DUMMY_MAIN$]) +m4trace:configure.ac:171: -1- AH_OUTPUT([F77_DUMMY_MAIN], [/* Define to dummy `main\' function (if any) required to link to the Fortran libraries. */ @%:@undef F77_DUMMY_MAIN]) -m4trace:configure.ac:168: -1- AC_DEFINE_TRACE_LITERAL([FC_DUMMY_MAIN_EQ_F77]) -m4trace:configure.ac:168: -1- m4_pattern_allow([^FC_DUMMY_MAIN_EQ_F77$]) -m4trace:configure.ac:168: -1- AH_OUTPUT([FC_DUMMY_MAIN_EQ_F77], [/* Define if F77 and FC dummy `main\' functions are identical. */ +m4trace:configure.ac:171: -1- AC_DEFINE_TRACE_LITERAL([FC_DUMMY_MAIN_EQ_F77]) +m4trace:configure.ac:171: -1- m4_pattern_allow([^FC_DUMMY_MAIN_EQ_F77$]) +m4trace:configure.ac:171: -1- AH_OUTPUT([FC_DUMMY_MAIN_EQ_F77], [/* Define if F77 and FC dummy `main\' functions are identical. */ @%:@undef FC_DUMMY_MAIN_EQ_F77]) -m4trace:configure.ac:168: -1- AH_OUTPUT([F77_FUNC], [/* Define to a macro mangling the given C identifier (in lower and upper +m4trace:configure.ac:171: -1- AH_OUTPUT([F77_FUNC], [/* Define to a macro mangling the given C identifier (in lower and upper case), which must not contain underscores, for linking with Fortran. */ @%:@undef F77_FUNC]) -m4trace:configure.ac:168: -1- AH_OUTPUT([F77_FUNC_], [/* As F77_FUNC, but for C identifiers containing underscores. */ +m4trace:configure.ac:171: -1- AH_OUTPUT([F77_FUNC_], [/* As F77_FUNC, but for C identifiers containing underscores. */ @%:@undef F77_FUNC_]) -m4trace:configure.ac:168: -1- AC_DEFINE_TRACE_LITERAL([F77_FUNC]) -m4trace:configure.ac:168: -1- m4_pattern_allow([^F77_FUNC$]) -m4trace:configure.ac:168: -1- AC_DEFINE_TRACE_LITERAL([F77_FUNC_]) -m4trace:configure.ac:168: -1- m4_pattern_allow([^F77_FUNC_$]) -m4trace:configure.ac:168: -1- AC_DEFINE_TRACE_LITERAL([F77_FUNC]) -m4trace:configure.ac:168: -1- m4_pattern_allow([^F77_FUNC$]) -m4trace:configure.ac:168: -1- AC_DEFINE_TRACE_LITERAL([F77_FUNC_]) -m4trace:configure.ac:168: -1- m4_pattern_allow([^F77_FUNC_$]) -m4trace:configure.ac:168: -1- AC_DEFINE_TRACE_LITERAL([F77_FUNC]) -m4trace:configure.ac:168: -1- m4_pattern_allow([^F77_FUNC$]) -m4trace:configure.ac:168: -1- AC_DEFINE_TRACE_LITERAL([F77_FUNC_]) -m4trace:configure.ac:168: -1- m4_pattern_allow([^F77_FUNC_$]) -m4trace:configure.ac:168: -1- AC_DEFINE_TRACE_LITERAL([F77_FUNC]) -m4trace:configure.ac:168: -1- m4_pattern_allow([^F77_FUNC$]) -m4trace:configure.ac:168: -1- AC_DEFINE_TRACE_LITERAL([F77_FUNC_]) -m4trace:configure.ac:168: -1- m4_pattern_allow([^F77_FUNC_$]) -m4trace:configure.ac:168: -1- AC_DEFINE_TRACE_LITERAL([F77_FUNC]) -m4trace:configure.ac:168: -1- m4_pattern_allow([^F77_FUNC$]) -m4trace:configure.ac:168: -1- AC_DEFINE_TRACE_LITERAL([F77_FUNC_]) -m4trace:configure.ac:168: -1- m4_pattern_allow([^F77_FUNC_$]) -m4trace:configure.ac:168: -1- AC_DEFINE_TRACE_LITERAL([F77_FUNC]) -m4trace:configure.ac:168: -1- m4_pattern_allow([^F77_FUNC$]) -m4trace:configure.ac:168: -1- AC_DEFINE_TRACE_LITERAL([F77_FUNC_]) -m4trace:configure.ac:168: -1- m4_pattern_allow([^F77_FUNC_$]) -m4trace:configure.ac:168: -1- AC_DEFINE_TRACE_LITERAL([F77_FUNC]) -m4trace:configure.ac:168: -1- m4_pattern_allow([^F77_FUNC$]) -m4trace:configure.ac:168: -1- AC_DEFINE_TRACE_LITERAL([F77_FUNC_]) -m4trace:configure.ac:168: -1- m4_pattern_allow([^F77_FUNC_$]) -m4trace:configure.ac:168: -1- AC_DEFINE_TRACE_LITERAL([F77_FUNC]) -m4trace:configure.ac:168: -1- m4_pattern_allow([^F77_FUNC$]) -m4trace:configure.ac:168: -1- AC_DEFINE_TRACE_LITERAL([F77_FUNC_]) -m4trace:configure.ac:168: -1- m4_pattern_allow([^F77_FUNC_$]) -m4trace:configure.ac:171: -1- AC_SUBST([FORTRANDIR]) -m4trace:configure.ac:171: -1- AC_SUBST_TRACE([FORTRANDIR]) -m4trace:configure.ac:171: -1- m4_pattern_allow([^FORTRANDIR$]) -m4trace:configure.ac:174: -1- AC_CHECK_HEADER_STDBOOL -m4trace:configure.ac:174: -1- AC_DEFINE_TRACE_LITERAL([HAVE__BOOL]) -m4trace:configure.ac:174: -1- m4_pattern_allow([^HAVE__BOOL$]) -m4trace:configure.ac:174: -1- AH_OUTPUT([HAVE__BOOL], [/* Define to 1 if the system has the type `_Bool\'. */ +m4trace:configure.ac:171: -1- AC_DEFINE_TRACE_LITERAL([F77_FUNC]) +m4trace:configure.ac:171: -1- m4_pattern_allow([^F77_FUNC$]) +m4trace:configure.ac:171: -1- AC_DEFINE_TRACE_LITERAL([F77_FUNC_]) +m4trace:configure.ac:171: -1- m4_pattern_allow([^F77_FUNC_$]) +m4trace:configure.ac:171: -1- AC_DEFINE_TRACE_LITERAL([F77_FUNC]) +m4trace:configure.ac:171: -1- m4_pattern_allow([^F77_FUNC$]) +m4trace:configure.ac:171: -1- AC_DEFINE_TRACE_LITERAL([F77_FUNC_]) +m4trace:configure.ac:171: -1- m4_pattern_allow([^F77_FUNC_$]) +m4trace:configure.ac:171: -1- AC_DEFINE_TRACE_LITERAL([F77_FUNC]) +m4trace:configure.ac:171: -1- m4_pattern_allow([^F77_FUNC$]) +m4trace:configure.ac:171: -1- AC_DEFINE_TRACE_LITERAL([F77_FUNC_]) +m4trace:configure.ac:171: -1- m4_pattern_allow([^F77_FUNC_$]) +m4trace:configure.ac:171: -1- AC_DEFINE_TRACE_LITERAL([F77_FUNC]) +m4trace:configure.ac:171: -1- m4_pattern_allow([^F77_FUNC$]) +m4trace:configure.ac:171: -1- AC_DEFINE_TRACE_LITERAL([F77_FUNC_]) +m4trace:configure.ac:171: -1- m4_pattern_allow([^F77_FUNC_$]) +m4trace:configure.ac:171: -1- AC_DEFINE_TRACE_LITERAL([F77_FUNC]) +m4trace:configure.ac:171: -1- m4_pattern_allow([^F77_FUNC$]) +m4trace:configure.ac:171: -1- AC_DEFINE_TRACE_LITERAL([F77_FUNC_]) +m4trace:configure.ac:171: -1- m4_pattern_allow([^F77_FUNC_$]) +m4trace:configure.ac:171: -1- AC_DEFINE_TRACE_LITERAL([F77_FUNC]) +m4trace:configure.ac:171: -1- m4_pattern_allow([^F77_FUNC$]) +m4trace:configure.ac:171: -1- AC_DEFINE_TRACE_LITERAL([F77_FUNC_]) +m4trace:configure.ac:171: -1- m4_pattern_allow([^F77_FUNC_$]) +m4trace:configure.ac:171: -1- AC_DEFINE_TRACE_LITERAL([F77_FUNC]) +m4trace:configure.ac:171: -1- m4_pattern_allow([^F77_FUNC$]) +m4trace:configure.ac:171: -1- AC_DEFINE_TRACE_LITERAL([F77_FUNC_]) +m4trace:configure.ac:171: -1- m4_pattern_allow([^F77_FUNC_$]) +m4trace:configure.ac:171: -1- AC_DEFINE_TRACE_LITERAL([F77_FUNC]) +m4trace:configure.ac:171: -1- m4_pattern_allow([^F77_FUNC$]) +m4trace:configure.ac:171: -1- AC_DEFINE_TRACE_LITERAL([F77_FUNC_]) +m4trace:configure.ac:171: -1- m4_pattern_allow([^F77_FUNC_$]) +m4trace:configure.ac:174: -1- AC_SUBST([FORTRANDIR]) +m4trace:configure.ac:174: -1- AC_SUBST_TRACE([FORTRANDIR]) +m4trace:configure.ac:174: -1- m4_pattern_allow([^FORTRANDIR$]) +m4trace:configure.ac:177: -1- AC_DEFINE_TRACE_LITERAL([HAVE__BOOL]) +m4trace:configure.ac:177: -1- m4_pattern_allow([^HAVE__BOOL$]) +m4trace:configure.ac:177: -1- AH_OUTPUT([HAVE__BOOL], [/* Define to 1 if the system has the type `_Bool\'. */ @%:@undef HAVE__BOOL]) -m4trace:configure.ac:174: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STDBOOL_H]) -m4trace:configure.ac:174: -1- m4_pattern_allow([^HAVE_STDBOOL_H$]) -m4trace:configure.ac:174: -1- AH_OUTPUT([HAVE_STDBOOL_H], [/* Define to 1 if stdbool.h conforms to C99. */ +m4trace:configure.ac:177: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STDBOOL_H]) +m4trace:configure.ac:177: -1- m4_pattern_allow([^HAVE_STDBOOL_H$]) +m4trace:configure.ac:177: -1- AH_OUTPUT([HAVE_STDBOOL_H], [/* Define to 1 if stdbool.h conforms to C99. */ @%:@undef HAVE_STDBOOL_H]) -m4trace:configure.ac:175: -1- AC_DEFINE_TRACE_LITERAL([const]) -m4trace:configure.ac:175: -1- m4_pattern_allow([^const$]) -m4trace:configure.ac:175: -1- AH_OUTPUT([const], [/* Define to empty if `const\' does not conform to ANSI C. */ +m4trace:configure.ac:178: -1- AC_DEFINE_TRACE_LITERAL([const]) +m4trace:configure.ac:178: -1- m4_pattern_allow([^const$]) +m4trace:configure.ac:178: -1- AH_OUTPUT([const], [/* Define to empty if `const\' does not conform to ANSI C. */ @%:@undef const]) -m4trace:configure.ac:176: -1- AC_C_INLINE -m4trace:configure.ac:176: -1- AH_OUTPUT([inline], [/* Define to `__inline__\' or `__inline\' if that\'s what the C compiler +m4trace:configure.ac:179: -1- AH_OUTPUT([inline], [/* Define to `__inline__\' or `__inline\' if that\'s what the C compiler calls it, or to nothing if \'inline\' is not supported under any name. */ #ifndef __cplusplus #undef inline #endif]) -m4trace:configure.ac:177: -1- AC_TYPE_SIZE_T -m4trace:configure.ac:177: -1- AC_DEFINE_TRACE_LITERAL([size_t]) -m4trace:configure.ac:177: -1- m4_pattern_allow([^size_t$]) -m4trace:configure.ac:177: -1- AH_OUTPUT([size_t], [/* Define to `unsigned int\' if does not define. */ +m4trace:configure.ac:180: -1- AC_DEFINE_TRACE_LITERAL([size_t]) +m4trace:configure.ac:180: -1- m4_pattern_allow([^size_t$]) +m4trace:configure.ac:180: -1- AH_OUTPUT([size_t], [/* Define to `unsigned int\' if does not define. */ @%:@undef size_t]) -m4trace:configure.ac:178: -1- AC_DEFINE_TRACE_LITERAL([TM_IN_SYS_TIME]) -m4trace:configure.ac:178: -1- m4_pattern_allow([^TM_IN_SYS_TIME$]) -m4trace:configure.ac:178: -1- AH_OUTPUT([TM_IN_SYS_TIME], [/* Define to 1 if your declares `struct tm\'. */ +m4trace:configure.ac:181: -1- AC_DEFINE_TRACE_LITERAL([TM_IN_SYS_TIME]) +m4trace:configure.ac:181: -1- m4_pattern_allow([^TM_IN_SYS_TIME$]) +m4trace:configure.ac:181: -1- AH_OUTPUT([TM_IN_SYS_TIME], [/* Define to 1 if your declares `struct tm\'. */ @%:@undef TM_IN_SYS_TIME]) -m4trace:configure.ac:181: -1- AC_FUNC_MALLOC -m4trace:configure.ac:181: -1- AC_CHECK_HEADERS([stdlib.h]) -m4trace:configure.ac:181: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the header file. */ +m4trace:configure.ac:184: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_STDLIB_H]) -m4trace:configure.ac:181: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STDLIB_H]) -m4trace:configure.ac:181: -1- m4_pattern_allow([^HAVE_STDLIB_H$]) -m4trace:configure.ac:181: -1- AC_DEFINE_TRACE_LITERAL([HAVE_MALLOC]) -m4trace:configure.ac:181: -1- m4_pattern_allow([^HAVE_MALLOC$]) -m4trace:configure.ac:181: -1- AH_OUTPUT([HAVE_MALLOC], [/* Define to 1 if your system has a GNU libc compatible `malloc\' function, and +m4trace:configure.ac:184: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STDLIB_H]) +m4trace:configure.ac:184: -1- m4_pattern_allow([^HAVE_STDLIB_H$]) +m4trace:configure.ac:184: -1- AC_DEFINE_TRACE_LITERAL([HAVE_MALLOC]) +m4trace:configure.ac:184: -1- m4_pattern_allow([^HAVE_MALLOC$]) +m4trace:configure.ac:184: -1- AH_OUTPUT([HAVE_MALLOC], [/* Define to 1 if your system has a GNU libc compatible `malloc\' function, and to 0 otherwise. */ @%:@undef HAVE_MALLOC]) -m4trace:configure.ac:181: -1- AC_DEFINE_TRACE_LITERAL([HAVE_MALLOC]) -m4trace:configure.ac:181: -1- m4_pattern_allow([^HAVE_MALLOC$]) -m4trace:configure.ac:181: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS malloc.$ac_objext"]) -m4trace:configure.ac:181: -1- AC_SUBST_TRACE([LIB@&t@OBJS]) -m4trace:configure.ac:181: -1- m4_pattern_allow([^LIB@&t@OBJS$]) -m4trace:configure.ac:181: -1- AC_LIBSOURCE([malloc.c]) -m4trace:configure.ac:181: -1- AC_DEFINE_TRACE_LITERAL([malloc]) -m4trace:configure.ac:181: -1- m4_pattern_allow([^malloc$]) -m4trace:configure.ac:181: -1- AH_OUTPUT([malloc], [/* Define to rpl_malloc if the replacement function should be used. */ +m4trace:configure.ac:184: -1- AC_DEFINE_TRACE_LITERAL([HAVE_MALLOC]) +m4trace:configure.ac:184: -1- m4_pattern_allow([^HAVE_MALLOC$]) +m4trace:configure.ac:184: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS malloc.$ac_objext"]) +m4trace:configure.ac:184: -1- AC_SUBST_TRACE([LIB@&t@OBJS]) +m4trace:configure.ac:184: -1- m4_pattern_allow([^LIB@&t@OBJS$]) +m4trace:configure.ac:184: -1- AC_LIBSOURCE([malloc.c]) +m4trace:configure.ac:184: -1- AC_DEFINE_TRACE_LITERAL([malloc]) +m4trace:configure.ac:184: -1- m4_pattern_allow([^malloc$]) +m4trace:configure.ac:184: -1- AH_OUTPUT([malloc], [/* Define to rpl_malloc if the replacement function should be used. */ @%:@undef malloc]) -m4trace:configure.ac:182: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS memcmp.$ac_objext"]) -m4trace:configure.ac:182: -1- AC_SUBST_TRACE([LIB@&t@OBJS]) -m4trace:configure.ac:182: -1- m4_pattern_allow([^LIB@&t@OBJS$]) -m4trace:configure.ac:182: -1- AC_LIBSOURCE([memcmp.c]) -m4trace:configure.ac:183: -1- AC_CHECK_FUNCS([memset pow sqrt]) -m4trace:configure.ac:183: -1- AH_OUTPUT([HAVE_MEMSET], [/* Define to 1 if you have the `memset\' function. */ +m4trace:configure.ac:185: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS memcmp.$ac_objext"]) +m4trace:configure.ac:185: -1- AC_SUBST_TRACE([LIB@&t@OBJS]) +m4trace:configure.ac:185: -1- m4_pattern_allow([^LIB@&t@OBJS$]) +m4trace:configure.ac:185: -1- AC_LIBSOURCE([memcmp.c]) +m4trace:configure.ac:186: -1- AH_OUTPUT([HAVE_MEMSET], [/* Define to 1 if you have the `memset\' function. */ @%:@undef HAVE_MEMSET]) -m4trace:configure.ac:183: -1- AH_OUTPUT([HAVE_POW], [/* Define to 1 if you have the `pow\' function. */ +m4trace:configure.ac:186: -1- AH_OUTPUT([HAVE_POW], [/* Define to 1 if you have the `pow\' function. */ @%:@undef HAVE_POW]) -m4trace:configure.ac:183: -1- AH_OUTPUT([HAVE_SQRT], [/* Define to 1 if you have the `sqrt\' function. */ +m4trace:configure.ac:186: -1- AH_OUTPUT([HAVE_SQRT], [/* Define to 1 if you have the `sqrt\' function. */ @%:@undef HAVE_SQRT]) -m4trace:configure.ac:186: -1- AC_CONFIG_FILES([Makefile +m4trace:configure.ac:189: -1- AC_CONFIG_FILES([Makefile include/Makefile lib/Makefile SRC/Makefile @@ -783,32 +765,31 @@ EXAMPLES/Makefile EXAMPLES/mpisprng/Makefile EXAMPLES/F77/Makefile]) -m4trace:configure.ac:186: -1- _m4_warn([obsolete], [AC_OUTPUT should be used without arguments. +m4trace:configure.ac:189: -1- _m4_warn([obsolete], [AC_OUTPUT should be used without arguments. You should run autoupdate.], []) -m4trace:configure.ac:186: -1- AC_SUBST([LIB@&t@OBJS], [$ac_libobjs]) -m4trace:configure.ac:186: -1- AC_SUBST_TRACE([LIB@&t@OBJS]) -m4trace:configure.ac:186: -1- m4_pattern_allow([^LIB@&t@OBJS$]) -m4trace:configure.ac:186: -1- AC_SUBST([LTLIBOBJS], [$ac_ltlibobjs]) -m4trace:configure.ac:186: -1- AC_SUBST_TRACE([LTLIBOBJS]) -m4trace:configure.ac:186: -1- m4_pattern_allow([^LTLIBOBJS$]) -m4trace:configure.ac:186: -1- AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"]) -m4trace:configure.ac:186: -1- AC_PREREQ([2.52]) -m4trace:configure.ac:186: -1- AC_SUBST([am__EXEEXT_TRUE]) -m4trace:configure.ac:186: -1- AC_SUBST_TRACE([am__EXEEXT_TRUE]) -m4trace:configure.ac:186: -1- m4_pattern_allow([^am__EXEEXT_TRUE$]) -m4trace:configure.ac:186: -1- AC_SUBST([am__EXEEXT_FALSE]) -m4trace:configure.ac:186: -1- AC_SUBST_TRACE([am__EXEEXT_FALSE]) -m4trace:configure.ac:186: -1- m4_pattern_allow([^am__EXEEXT_FALSE$]) -m4trace:configure.ac:186: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_TRUE]) -m4trace:configure.ac:186: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_FALSE]) -m4trace:configure.ac:186: -1- AC_SUBST_TRACE([top_builddir]) -m4trace:configure.ac:186: -1- AC_SUBST_TRACE([top_build_prefix]) -m4trace:configure.ac:186: -1- AC_SUBST_TRACE([srcdir]) -m4trace:configure.ac:186: -1- AC_SUBST_TRACE([abs_srcdir]) -m4trace:configure.ac:186: -1- AC_SUBST_TRACE([top_srcdir]) -m4trace:configure.ac:186: -1- AC_SUBST_TRACE([abs_top_srcdir]) -m4trace:configure.ac:186: -1- AC_SUBST_TRACE([builddir]) -m4trace:configure.ac:186: -1- AC_SUBST_TRACE([abs_builddir]) -m4trace:configure.ac:186: -1- AC_SUBST_TRACE([abs_top_builddir]) -m4trace:configure.ac:186: -1- AC_SUBST_TRACE([INSTALL]) -m4trace:configure.ac:186: -1- AC_SUBST_TRACE([MKDIR_P]) +m4trace:configure.ac:189: -1- AC_SUBST([LIB@&t@OBJS], [$ac_libobjs]) +m4trace:configure.ac:189: -1- AC_SUBST_TRACE([LIB@&t@OBJS]) +m4trace:configure.ac:189: -1- m4_pattern_allow([^LIB@&t@OBJS$]) +m4trace:configure.ac:189: -1- AC_SUBST([LTLIBOBJS], [$ac_ltlibobjs]) +m4trace:configure.ac:189: -1- AC_SUBST_TRACE([LTLIBOBJS]) +m4trace:configure.ac:189: -1- m4_pattern_allow([^LTLIBOBJS$]) +m4trace:configure.ac:189: -1- AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"]) +m4trace:configure.ac:189: -1- AC_SUBST([am__EXEEXT_TRUE]) +m4trace:configure.ac:189: -1- AC_SUBST_TRACE([am__EXEEXT_TRUE]) +m4trace:configure.ac:189: -1- m4_pattern_allow([^am__EXEEXT_TRUE$]) +m4trace:configure.ac:189: -1- AC_SUBST([am__EXEEXT_FALSE]) +m4trace:configure.ac:189: -1- AC_SUBST_TRACE([am__EXEEXT_FALSE]) +m4trace:configure.ac:189: -1- m4_pattern_allow([^am__EXEEXT_FALSE$]) +m4trace:configure.ac:189: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_TRUE]) +m4trace:configure.ac:189: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_FALSE]) +m4trace:configure.ac:189: -1- AC_SUBST_TRACE([top_builddir]) +m4trace:configure.ac:189: -1- AC_SUBST_TRACE([top_build_prefix]) +m4trace:configure.ac:189: -1- AC_SUBST_TRACE([srcdir]) +m4trace:configure.ac:189: -1- AC_SUBST_TRACE([abs_srcdir]) +m4trace:configure.ac:189: -1- AC_SUBST_TRACE([top_srcdir]) +m4trace:configure.ac:189: -1- AC_SUBST_TRACE([abs_top_srcdir]) +m4trace:configure.ac:189: -1- AC_SUBST_TRACE([builddir]) +m4trace:configure.ac:189: -1- AC_SUBST_TRACE([abs_builddir]) +m4trace:configure.ac:189: -1- AC_SUBST_TRACE([abs_top_builddir]) +m4trace:configure.ac:189: -1- AC_SUBST_TRACE([INSTALL]) +m4trace:configure.ac:189: -1- AC_SUBST_TRACE([MKDIR_P]) diff -urN sprng5.orig/check/Makefile.in sprng5/check/Makefile.in --- sprng5.orig/check/Makefile.in 2018-07-21 21:14:51.000000000 +0000 +++ sprng5/check/Makefile.in 2021-06-08 16:40:21.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -259,6 +259,7 @@ MKDIR_P = @MKDIR_P@ MPICXX = @MPICXX@ MPIF77 = @MPIF77@ +MPI_CXXLIB = @MPI_CXXLIB@ MPI_DEF = @MPI_DEF@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ diff -urN sprng5.orig/check/cmrg/F77/Makefile.am sprng5/check/cmrg/F77/Makefile.am --- sprng5.orig/check/cmrg/F77/Makefile.am 2018-07-21 16:04:58.000000000 +0000 +++ sprng5/check/cmrg/F77/Makefile.am 2021-06-08 16:49:02.000000000 +0000 @@ -13,16 +13,16 @@ check_fcmrg_SOURCES = check_genf.F check_fcmrg_DEPENDENCIES = $(LIBDIR)/libsprng.a check_fcmrg_FFLAGS = $(FFPSIZE) -I$(INCLUDEDIR) -check_fcmrg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ +check_fcmrg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ $(MPI_CXXLIB) check_fcmrg_LDFLAGS = check_sim_fcmrg_SOURCES = check_genf_simple.F check_sim_fcmrg_DEPENDENCIES = $(LIBDIR)/libsprng.a -check_sim_fcmrg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ +check_sim_fcmrg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ $(MPI_CXXLIB) check_sim_fcmrg_FFLAGS =$(FFPSIZE) -I$(INCLUDEDIR) check_sim_fcmrg_LDFLAGS = time_fcmrg_SOURCES = timingf.F time_fcmrg_DEPENDENCIES = $(LIBDIR)/libsprng.a -time_fcmrg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ +time_fcmrg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ $(MPI_CXXLIB) time_fcmrg_FFLAGS = $(FFPSIZE) -I$(INCLUDEDIR) time_fcmrg_LDFLAGS = diff -urN sprng5.orig/check/cmrg/F77/Makefile.in sprng5/check/cmrg/F77/Makefile.in --- sprng5.orig/check/cmrg/F77/Makefile.in 2018-07-21 19:48:26.000000000 +0000 +++ sprng5/check/cmrg/F77/Makefile.in 2021-06-08 16:52:29.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -108,6 +108,7 @@ PROGRAMS = $(bin_PROGRAMS) am_check_fcmrg_OBJECTS = check_fcmrg-check_genf.$(OBJEXT) check_fcmrg_OBJECTS = $(am_check_fcmrg_OBJECTS) +am__DEPENDENCIES_1 = check_fcmrg_LINK = $(F77LD) $(check_fcmrg_FFLAGS) $(FFLAGS) \ $(check_fcmrg_LDFLAGS) $(LDFLAGS) -o $@ am_check_sim_fcmrg_OBJECTS = \ @@ -293,6 +294,7 @@ MKDIR_P = @MKDIR_P@ MPICXX = @MPICXX@ MPIF77 = @MPIF77@ +MPI_CXXLIB = @MPI_CXXLIB@ MPI_DEF = @MPI_DEF@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ @@ -377,16 +379,16 @@ check_fcmrg_SOURCES = check_genf.F check_fcmrg_DEPENDENCIES = $(LIBDIR)/libsprng.a check_fcmrg_FFLAGS = $(FFPSIZE) -I$(INCLUDEDIR) -check_fcmrg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ +check_fcmrg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ $(MPI_CXXLIB) check_fcmrg_LDFLAGS = check_sim_fcmrg_SOURCES = check_genf_simple.F check_sim_fcmrg_DEPENDENCIES = $(LIBDIR)/libsprng.a -check_sim_fcmrg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ +check_sim_fcmrg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ $(MPI_CXXLIB) check_sim_fcmrg_FFLAGS = $(FFPSIZE) -I$(INCLUDEDIR) check_sim_fcmrg_LDFLAGS = time_fcmrg_SOURCES = timingf.F time_fcmrg_DEPENDENCIES = $(LIBDIR)/libsprng.a -time_fcmrg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ +time_fcmrg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ $(MPI_CXXLIB) time_fcmrg_FFLAGS = $(FFPSIZE) -I$(INCLUDEDIR) time_fcmrg_LDFLAGS = bin_SCRIPTS = checkcmrg timecmrg diff -urN sprng5.orig/check/cmrg/Makefile.in sprng5/check/cmrg/Makefile.in --- sprng5.orig/check/cmrg/Makefile.in 2018-07-21 19:48:26.000000000 +0000 +++ sprng5/check/cmrg/Makefile.in 2021-06-08 16:40:21.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -297,6 +297,7 @@ MKDIR_P = @MKDIR_P@ MPICXX = @MPICXX@ MPIF77 = @MPIF77@ +MPI_CXXLIB = @MPI_CXXLIB@ MPI_DEF = @MPI_DEF@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ diff -urN sprng5.orig/check/lcg/F77/Makefile.am sprng5/check/lcg/F77/Makefile.am --- sprng5.orig/check/lcg/F77/Makefile.am 2018-07-21 16:05:46.000000000 +0000 +++ sprng5/check/lcg/F77/Makefile.am 2021-06-08 16:48:47.000000000 +0000 @@ -12,17 +12,17 @@ check_flcg_SOURCES = check_genf.F check_flcg_DEPENDENCIES = $(LIBDIR)/libsprng.a check_flcg_FFLAGS = $(FFPSIZE) -I$(INCLUDEDIR) -check_flcg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ +check_flcg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ $(MPI_CXXLIB) check_flcg_LDFLAGS = check_sim_flcg_SOURCES = check_genf_simple.F check_sim_flcg_DEPENDENCIES = $(LIBDIR)/libsprng.a check_sim_flcg_FFLAGS = $(FFPSIZE) -I$(INCLUDEDIR) -check_sim_flcg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ +check_sim_flcg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ $(MPI_CXXLIB) check_sim_flcg_LDFLAGS = time_flcg_SOURCES = timingf.F time_flcg_DEPENDENCIES = $(LIBDIR)/libsprng.a time_flcg_FFLAGS = $(FFPSIZE) -I$(INCLUDEDIR) -time_flcg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ +time_flcg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ $(MPI_CXXLIB) time_flcg_LDFLAGS = bin_SCRIPTS = checklcg timelcg diff -urN sprng5.orig/check/lcg/F77/Makefile.in sprng5/check/lcg/F77/Makefile.in --- sprng5.orig/check/lcg/F77/Makefile.in 2018-07-21 19:48:27.000000000 +0000 +++ sprng5/check/lcg/F77/Makefile.in 2021-06-08 16:52:17.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -108,6 +108,7 @@ PROGRAMS = $(bin_PROGRAMS) am_check_flcg_OBJECTS = check_flcg-check_genf.$(OBJEXT) check_flcg_OBJECTS = $(am_check_flcg_OBJECTS) +am__DEPENDENCIES_1 = check_flcg_LINK = $(F77LD) $(check_flcg_FFLAGS) $(FFLAGS) \ $(check_flcg_LDFLAGS) $(LDFLAGS) -o $@ am_check_sim_flcg_OBJECTS = \ @@ -293,6 +294,7 @@ MKDIR_P = @MKDIR_P@ MPICXX = @MPICXX@ MPIF77 = @MPIF77@ +MPI_CXXLIB = @MPI_CXXLIB@ MPI_DEF = @MPI_DEF@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ @@ -377,17 +379,17 @@ check_flcg_SOURCES = check_genf.F check_flcg_DEPENDENCIES = $(LIBDIR)/libsprng.a check_flcg_FFLAGS = $(FFPSIZE) -I$(INCLUDEDIR) -check_flcg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ +check_flcg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ $(MPI_CXXLIB) check_flcg_LDFLAGS = check_sim_flcg_SOURCES = check_genf_simple.F check_sim_flcg_DEPENDENCIES = $(LIBDIR)/libsprng.a check_sim_flcg_FFLAGS = $(FFPSIZE) -I$(INCLUDEDIR) -check_sim_flcg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ +check_sim_flcg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ $(MPI_CXXLIB) check_sim_flcg_LDFLAGS = time_flcg_SOURCES = timingf.F time_flcg_DEPENDENCIES = $(LIBDIR)/libsprng.a time_flcg_FFLAGS = $(FFPSIZE) -I$(INCLUDEDIR) -time_flcg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ +time_flcg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ $(MPI_CXXLIB) time_flcg_LDFLAGS = bin_SCRIPTS = checklcg timelcg CLEANFILES = $(bin_SCRIPTS) diff -urN sprng5.orig/check/lcg/Makefile.in sprng5/check/lcg/Makefile.in --- sprng5.orig/check/lcg/Makefile.in 2018-07-21 19:48:27.000000000 +0000 +++ sprng5/check/lcg/Makefile.in 2021-06-08 16:40:21.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -296,6 +296,7 @@ MKDIR_P = @MKDIR_P@ MPICXX = @MPICXX@ MPIF77 = @MPIF77@ +MPI_CXXLIB = @MPI_CXXLIB@ MPI_DEF = @MPI_DEF@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ diff -urN sprng5.orig/check/lcg64/F77/Makefile.am sprng5/check/lcg64/F77/Makefile.am --- sprng5.orig/check/lcg64/F77/Makefile.am 2018-07-21 16:05:14.000000000 +0000 +++ sprng5/check/lcg64/F77/Makefile.am 2021-06-08 16:49:10.000000000 +0000 @@ -13,17 +13,17 @@ check_flcg_SOURCES = check_genf.F check_flcg_DEPENDENCIES = $(LIBDIR)/libsprng.a check_flcg_FFLAGS = $(FFPSIZE) -I$(INCLUDEDIR) -check_flcg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ +check_flcg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ $(MPI_CXXLIB) check_flcg_LDFLAGS = check_sim_flcg_SOURCES = check_genf_simple.F check_sim_flcg_DEPENDENCIES = $(LIBDIR)/libsprng.a check_sim_flcg_FFLAGS = $(FFPSIZE) -I$(INCLUDEDIR) -check_sim_flcg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ +check_sim_flcg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ $(MPI_CXXLIB) check_sim_flcg_LDFLAGS = time_flcg_SOURCES = timingf.F time_flcg_DEPENDENCIES = $(LIBDIR)/libsprng.a time_flcg_FFLAGS = $(FFPSIZE) -I$(INCLUDEDIR) -time_flcg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ +time_flcg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ $(MPI_CXXLIB) time_flcg_LDFLAGS = diff -urN sprng5.orig/check/lcg64/F77/Makefile.in sprng5/check/lcg64/F77/Makefile.in --- sprng5.orig/check/lcg64/F77/Makefile.in 2018-07-21 19:48:27.000000000 +0000 +++ sprng5/check/lcg64/F77/Makefile.in 2021-06-08 16:52:23.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -108,6 +108,7 @@ PROGRAMS = $(bin_PROGRAMS) am_check_flcg_OBJECTS = check_flcg-check_genf.$(OBJEXT) check_flcg_OBJECTS = $(am_check_flcg_OBJECTS) +am__DEPENDENCIES_1 = check_flcg_LINK = $(F77LD) $(check_flcg_FFLAGS) $(FFLAGS) \ $(check_flcg_LDFLAGS) $(LDFLAGS) -o $@ am_check_sim_flcg_OBJECTS = \ @@ -293,6 +294,7 @@ MKDIR_P = @MKDIR_P@ MPICXX = @MPICXX@ MPIF77 = @MPIF77@ +MPI_CXXLIB = @MPI_CXXLIB@ MPI_DEF = @MPI_DEF@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ @@ -377,17 +379,17 @@ check_flcg_SOURCES = check_genf.F check_flcg_DEPENDENCIES = $(LIBDIR)/libsprng.a check_flcg_FFLAGS = $(FFPSIZE) -I$(INCLUDEDIR) -check_flcg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ +check_flcg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ $(MPI_CXXLIB) check_flcg_LDFLAGS = check_sim_flcg_SOURCES = check_genf_simple.F check_sim_flcg_DEPENDENCIES = $(LIBDIR)/libsprng.a check_sim_flcg_FFLAGS = $(FFPSIZE) -I$(INCLUDEDIR) -check_sim_flcg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ +check_sim_flcg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ $(MPI_CXXLIB) check_sim_flcg_LDFLAGS = time_flcg_SOURCES = timingf.F time_flcg_DEPENDENCIES = $(LIBDIR)/libsprng.a time_flcg_FFLAGS = $(FFPSIZE) -I$(INCLUDEDIR) -time_flcg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ +time_flcg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ $(MPI_CXXLIB) time_flcg_LDFLAGS = bin_SCRIPTS = checklcg timelcg CLEANFILES = $(bin_SCRIPTS) diff -urN sprng5.orig/check/lcg64/Makefile.in sprng5/check/lcg64/Makefile.in --- sprng5.orig/check/lcg64/Makefile.in 2018-07-21 19:48:27.000000000 +0000 +++ sprng5/check/lcg64/Makefile.in 2021-06-08 16:40:21.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -297,6 +297,7 @@ MKDIR_P = @MKDIR_P@ MPICXX = @MPICXX@ MPIF77 = @MPIF77@ +MPI_CXXLIB = @MPI_CXXLIB@ MPI_DEF = @MPI_DEF@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ diff -urN sprng5.orig/check/lfg/F77/Makefile.am sprng5/check/lfg/F77/Makefile.am --- sprng5.orig/check/lfg/F77/Makefile.am 2018-07-21 21:10:38.000000000 +0000 +++ sprng5/check/lfg/F77/Makefile.am 2021-06-08 16:46:05.000000000 +0000 @@ -13,18 +13,18 @@ check_flfg_SOURCES = check_genf.F check_flfg_DEPENDENCIES = $(LIBDIR)/libsprng.a check_flfg_FFLAGS = $(FFPSIZE) -I$(INCLUDEDIR) -check_flfg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ -check_flfg_LDFLAGS = +check_flfg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ $(MPI_CXXLIB) +check_flfg_LDFLAGS = check_sim_flfg_SOURCES = check_genf_simple.F check_sim_flfg_DEPENDENCIES = $(LIBDIR)/libsprng.a -check_sim_flfg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ +check_sim_flfg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ $(MPI_CXXLIB) check_sim_flfg_FFLAGS =$(FFPSIZE) -I$(INCLUDEDIR) -check_sim_flfg_LDFLAGS = +check_sim_flfg_LDFLAGS = time_flfg_SOURCES = timingf.F time_flfg_DEPENDENCIES = $(LIBDIR)/libsprng.a -time_flfg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ +time_flfg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ $(MPI_CXXLIB) time_flfg_FFLAGS = $(FFPSIZE) -I$(INCLUDEDIR) -time_flfg_LDFLAGS = +time_flfg_LDFLAGS = bin_SCRIPTS = checklfg timelfg CLEANFILES = $(bin_SCRIPTS) diff -urN sprng5.orig/check/lfg/F77/Makefile.in sprng5/check/lfg/F77/Makefile.in --- sprng5.orig/check/lfg/F77/Makefile.in 2018-07-21 21:10:46.000000000 +0000 +++ sprng5/check/lfg/F77/Makefile.in 2021-06-08 16:52:06.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -108,6 +108,7 @@ PROGRAMS = $(bin_PROGRAMS) am_check_flfg_OBJECTS = check_flfg-check_genf.$(OBJEXT) check_flfg_OBJECTS = $(am_check_flfg_OBJECTS) +am__DEPENDENCIES_1 = check_flfg_LINK = $(F77LD) $(check_flfg_FFLAGS) $(FFLAGS) \ $(check_flfg_LDFLAGS) $(LDFLAGS) -o $@ am_check_sim_flfg_OBJECTS = \ @@ -293,6 +294,7 @@ MKDIR_P = @MKDIR_P@ MPICXX = @MPICXX@ MPIF77 = @MPIF77@ +MPI_CXXLIB = @MPI_CXXLIB@ MPI_DEF = @MPI_DEF@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ @@ -377,16 +379,16 @@ check_flfg_SOURCES = check_genf.F check_flfg_DEPENDENCIES = $(LIBDIR)/libsprng.a check_flfg_FFLAGS = $(FFPSIZE) -I$(INCLUDEDIR) -check_flfg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ +check_flfg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ $(MPI_CXXLIB) check_flfg_LDFLAGS = check_sim_flfg_SOURCES = check_genf_simple.F check_sim_flfg_DEPENDENCIES = $(LIBDIR)/libsprng.a -check_sim_flfg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ +check_sim_flfg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ $(MPI_CXXLIB) check_sim_flfg_FFLAGS = $(FFPSIZE) -I$(INCLUDEDIR) check_sim_flfg_LDFLAGS = time_flfg_SOURCES = timingf.F time_flfg_DEPENDENCIES = $(LIBDIR)/libsprng.a -time_flfg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ +time_flfg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ $(MPI_CXXLIB) time_flfg_FFLAGS = $(FFPSIZE) -I$(INCLUDEDIR) time_flfg_LDFLAGS = bin_SCRIPTS = checklfg timelfg diff -urN sprng5.orig/check/lfg/Makefile.in sprng5/check/lfg/Makefile.in --- sprng5.orig/check/lfg/Makefile.in 2018-07-21 19:48:27.000000000 +0000 +++ sprng5/check/lfg/Makefile.in 2021-06-08 16:40:21.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -296,6 +296,7 @@ MKDIR_P = @MKDIR_P@ MPICXX = @MPICXX@ MPIF77 = @MPIF77@ +MPI_CXXLIB = @MPI_CXXLIB@ MPI_DEF = @MPI_DEF@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ diff -urN sprng5.orig/check/mlfg/F77/Makefile.am sprng5/check/mlfg/F77/Makefile.am --- sprng5.orig/check/mlfg/F77/Makefile.am 2018-07-21 16:05:27.000000000 +0000 +++ sprng5/check/mlfg/F77/Makefile.am 2021-06-08 16:49:19.000000000 +0000 @@ -13,16 +13,16 @@ check_fmlfg_SOURCES = check_genf.F check_fmlfg_DEPENDENCIES = $(LIBDIR)/libsprng.a check_fmlfg_FFLAGS = $(FFPSIZE) -I$(INCLUDEDIR) -check_fmlfg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ +check_fmlfg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ $(MPI_CXXLIB) check_fmlfg_LDFLAGS = check_sim_fmlfg_SOURCES = check_genf_simple.F check_sim_fmlfg_DEPENDENCIES = $(LIBDIR)/libsprng.a -check_sim_fmlfg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ +check_sim_fmlfg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ $(MPI_CXXLIB) check_sim_fmlfg_FFLAGS =$(FFPSIZE) -I$(INCLUDEDIR) check_sim_fmlfg_LDFLAGS = time_fmlfg_SOURCES = timingf.F time_fmlfg_DEPENDENCIES = $(LIBDIR)/libsprng.a -time_fmlfg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ +time_fmlfg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ $(MPI_CXXLIB) time_fmlfg_FFLAGS = $(FFPSIZE) -I$(INCLUDEDIR) time_fmlfg_LDFLAGS = diff -urN sprng5.orig/check/mlfg/F77/Makefile.in sprng5/check/mlfg/F77/Makefile.in --- sprng5.orig/check/mlfg/F77/Makefile.in 2018-07-21 19:48:27.000000000 +0000 +++ sprng5/check/mlfg/F77/Makefile.in 2021-06-08 16:52:35.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -108,6 +108,7 @@ PROGRAMS = $(bin_PROGRAMS) am_check_fmlfg_OBJECTS = check_fmlfg-check_genf.$(OBJEXT) check_fmlfg_OBJECTS = $(am_check_fmlfg_OBJECTS) +am__DEPENDENCIES_1 = check_fmlfg_LINK = $(F77LD) $(check_fmlfg_FFLAGS) $(FFLAGS) \ $(check_fmlfg_LDFLAGS) $(LDFLAGS) -o $@ am_check_sim_fmlfg_OBJECTS = \ @@ -293,6 +294,7 @@ MKDIR_P = @MKDIR_P@ MPICXX = @MPICXX@ MPIF77 = @MPIF77@ +MPI_CXXLIB = @MPI_CXXLIB@ MPI_DEF = @MPI_DEF@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ @@ -377,16 +379,16 @@ check_fmlfg_SOURCES = check_genf.F check_fmlfg_DEPENDENCIES = $(LIBDIR)/libsprng.a check_fmlfg_FFLAGS = $(FFPSIZE) -I$(INCLUDEDIR) -check_fmlfg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ +check_fmlfg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ $(MPI_CXXLIB) check_fmlfg_LDFLAGS = check_sim_fmlfg_SOURCES = check_genf_simple.F check_sim_fmlfg_DEPENDENCIES = $(LIBDIR)/libsprng.a -check_sim_fmlfg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ +check_sim_fmlfg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ $(MPI_CXXLIB) check_sim_fmlfg_FFLAGS = $(FFPSIZE) -I$(INCLUDEDIR) check_sim_fmlfg_LDFLAGS = time_fmlfg_SOURCES = timingf.F time_fmlfg_DEPENDENCIES = $(LIBDIR)/libsprng.a -time_fmlfg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ +time_fmlfg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ $(MPI_CXXLIB) time_fmlfg_FFLAGS = $(FFPSIZE) -I$(INCLUDEDIR) time_fmlfg_LDFLAGS = bin_SCRIPTS = checkmlfg timemlfg diff -urN sprng5.orig/check/mlfg/F77/mlfg.data sprng5/check/mlfg/F77/mlfg.data --- sprng5.orig/check/mlfg/F77/mlfg.data 2014-06-17 15:09:52.000000000 +0000 +++ sprng5/check/mlfg/F77/mlfg.data 2021-06-07 15:46:25.000000000 +0000 @@ -1,1800 +1,1800 @@ -1479592390 -400887705 -1040493538 -1265058804 -769363005 -421277251 -932166349 -450902356 -1029425901 -900326238 -497392476 -1514374107 -467603155 -102597076 -1402703629 -1640901326 -1729708475 -253896737 -890744115 -1413293551 -195470254 -731400149 -635754856 -1135622914 -2116101375 -1207958628 -1048773999 -533224416 -1783933364 -1069377032 -282068853 -1301322252 -1142678914 -1080940249 -634768786 -551735117 -1357583794 -794181935 -444257450 -392936031 -1602380176 -1013726377 -341595908 -1191376433 -944803925 -24239601 -713858690 -2057623794 -1716700195 -899258752 -975464505 -1753253499 -139930507 -597733504 -604506895 -1402326973 -712035993 -171625679 -600788209 -1444427328 -1547795930 -1078400464 -1867472852 -280990064 -811726254 -157778254 -820188763 -709446781 -862183494 -440101858 -315845944 -1558084640 -426249196 -1702958909 -978854151 -998835672 -1461277721 -2041920424 -2006877256 -186801195 -558791815 -2060886137 -1641432522 -2123159983 -791676984 -1833792251 -360219039 -1338017349 -1472217997 -547164146 -653120174 -1223831034 -1249034152 -1938874780 -556939932 -1438070391 -1538041612 -576170163 -590974348 -1697288476 -1156973706 -506745635 -1003874891 -1892991309 -1906993259 -1870329109 -212365321 -258788736 -65103646 -740461238 -1459630964 -1623151653 -1727656421 -991988946 -1542965781 -1144869310 -255130065 -1118860450 -557598993 -1330228411 -1213522106 -231926045 -378897595 -1721744056 -1105231787 -1904166780 -1280622350 -1493397169 -1202643016 -837093238 -71971675 -151049523 -1331408212 -2088759196 -942612908 -1068485569 -2066369055 -1477939633 -94545171 -1636931995 -521099612 -2144156113 -815980232 -964233035 -1843278369 -196187815 -423281740 -2032230745 -624456069 -1589181218 -56503630 -145449295 -554586586 -1673933113 -1287110625 -422533850 -1836587978 -929874167 -420229329 -166379842 -1995162903 -1433884728 -1491313745 -25672326 -1950538526 -1037097897 -61386101 -1550686280 -1501592923 -1142942159 -600290540 -1545023276 -172391556 -1364797429 -1868150767 -1487743920 -1604978597 -780916924 -1091645028 -1387221981 -651779219 -214549038 -1989764002 -1751461710 -1841205666 -688192365 -184572915 -169564183 -636654288 -559430259 -229871618 -1624587181 -932366538 -1336180199 -1973588720 -486955602 -2099200145 -1348355598 -138298841 -2081534641 -906408332 -474269170 -581609504 -2026261507 -1523336333 -1365214220 -1593669467 -633312460 -534204502 -544080195 -1978535384 -998786168 -314105974 -1012159832 -925473505 -1857615718 -149441585 -185145916 -222548712 -214901249 -1791082863 -1156326382 -44156030 -1253848688 -648308961 -1288282789 -153202450 -1772907931 -1503707335 -1308809522 -1469723844 -651728408 -1385217084 -1688153643 -883416071 -1981825721 -935497252 -1377380853 -1983544873 -1286859818 -1585767728 -1531475878 -882078648 -415333362 -1395847242 -1474523846 -1025279620 -1453526478 -1944572365 -575609910 -1664645562 -765564688 -264128408 -369303556 -803746731 -569818854 -925400572 -2004712689 -992000489 -3722056 -116215218 -1740813495 -101125105 -980730455 -120627024 -1214721491 -682185178 -1068469270 -884987585 -1840942807 -1737137317 -1816085293 -903421023 -397377405 -1125288424 -2013661749 -1368861197 -1731290227 -2134454247 -1711480582 -1031810358 -1392566074 -2107207741 -624542422 -1564680160 -1472392593 -1091602407 -987533462 -1430673651 -2011825288 -184877995 -2023363496 -893571685 -247862721 -1016623317 -1682186264 -847908985 -1228631240 -785973376 -1997687835 -756013926 -784070453 -191364269 -552318611 -1333547364 -228787672 -1973343505 -644963710 -605063279 -341291299 -734289559 -1524853832 -427404378 -1681274255 -428472254 -1017778224 -1178654103 -344529740 -1582995971 -330199032 -1876961777 -996288409 -157077643 -1340629876 -1769997978 -71594890 -1218062566 -806603956 -2138222332 -1308932407 -563298890 -798159568 -2014494904 -742739157 -1047753722 -953156701 -50340272 -1178497303 -380073006 -1526319734 -680697446 -380667800 -1315157242 -537460065 -500233660 -2061892812 -1366442105 -1935012331 -1481417693 -1111010588 -1230471380 -1583051758 -1080935888 -397183155 -607363434 -1149118437 -1399647706 -1094739923 -671401034 -1781976193 -1166598850 -1207679567 -1755723017 -2111472309 -693052287 -1848118062 -1905561569 -2020746841 -1077011262 -1130929152 -382320128 -912786744 -122258886 -1578487775 -1960179416 -977022306 -652867489 -418847621 -1236707875 -2030308928 -1722084063 -1585588025 -1662179997 -1005427071 -630649413 -1679305527 -1829360460 -521204301 -1170384730 -1364210546 -1403762658 -438940872 -1454250674 -929251403 -193839673 -805148995 -1936099367 -2030553683 -660153960 -1024915489 -335075343 -1815210300 -4003820 -1072220302 -803990184 -404496852 -259050047 -568574832 -1450139353 -388103239 -844992516 -1562545362 -209552964 -2109297470 -357474685 -308918504 -482165576 -176202981 -849589401 -1909939244 -1398586071 -761301020 -94066398 -914163170 -1162457152 -524373095 -111670500 -1406645666 -1520638422 -179973084 -577704753 -567369867 -492498576 -477707884 -422504232 -1189043798 -2122200284 -413787188 -1299927542 -2001649971 -1623425641 -259617478 -782354286 -1441777067 -1189780966 -832861494 -1922663578 -489493594 -159925960 -549606004 -694951328 -1266591662 -1905655810 -1260404919 -198058865 -1598311509 -1515193841 -1178362594 -804236617 -1539374093 -608223606 -1272398495 -896831742 -1452624622 -1415842864 -18984058 -1269874372 -309254423 -1197187450 -1134726181 -1337381665 -986418074 -481854487 -255315766 -1250286757 -1619514543 -1291095180 -750922653 -1171572482 -597207435 -67722646 -1736087138 -1134330875 -682380070 -1019543188 -1748022154 -274802574 -1658557815 -1218129743 -59760849 -1330060215 -921595624 -1487337391 -1924150298 -1043422798 -448582813 -864709837 -1200776427 -1568167931 -289297737 -0.998205 -0.956935 -0.371610 -0.762515 -0.436362 -0.019143 -0.811395 -0.374120 -0.499913 -0.985215 -0.722624 -0.046144 -0.066780 -0.665696 -0.915794 -0.256873 -0.479638 -0.232819 -0.758608 -0.737500 -0.031275 -0.744219 -0.107267 -0.489566 -0.821224 -0.834118 -0.256182 -0.119493 -0.065291 -0.628854 -0.368258 -0.153621 -0.071111 -0.177034 -0.143429 -0.698935 -0.979219 -0.016459 -0.673069 -0.016057 -0.410859 -0.578348 -0.664259 -0.158482 -0.458950 -0.525902 -0.550917 -0.404576 -0.002026 -0.130242 -0.879852 -0.230896 -0.946384 -0.569865 -0.326170 -0.778187 -0.146863 -0.016558 -0.725336 -0.288450 -0.764894 -0.780762 -0.656779 -0.092216 -0.793757 -0.487608 -0.257837 -0.488781 -0.149146 -0.669914 -0.001489 -0.288133 -0.555481 -0.321171 -0.718555 -0.990359 -0.301558 -0.591527 -0.149264 -0.567102 -0.018052 -0.395003 -0.136582 -0.542215 -0.718118 -0.449781 -0.273951 -0.036165 -0.292450 -0.618658 -0.609486 -0.617456 -0.577555 -0.622264 -0.278303 -0.715745 -0.582708 -0.769150 -0.231852 -0.025023 -0.077338 -0.949034 -0.951913 -0.038506 -0.644418 -0.199632 -0.635619 -0.964239 -0.108352 -0.871435 -0.291971 -0.814780 -0.256090 -0.756134 -0.247932 -0.580847 -0.263067 -0.989678 -0.755556 -0.763647 -0.526426 -0.248962 -0.987128 -0.256166 -0.940098 -0.018436 -0.736089 -0.791358 -0.428726 -0.353863 -0.255370 -0.968766 -0.530266 -0.021746 -0.258345 -0.168888 -0.026535 -0.587460 -0.452756 -0.546052 -0.543885 -0.273066 -0.418372 -0.856860 -0.452977 -0.910723 -0.400482 -0.844323 -0.541465 -0.779143 -0.144615 -0.600527 -0.898527 -0.636296 -0.816247 -0.860969 -0.287909 -0.959946 -0.836343 -0.244884 -0.489609 -0.917976 -0.284893 -0.426013 -0.918815 -0.248499 -0.639643 -0.651506 -0.199583 -0.375159 -0.434056 -0.256600 -0.694628 -0.903979 -0.616020 -0.736798 -0.816417 -0.983880 -0.414459 -0.302109 -0.391162 -0.699490 -0.921250 -0.886555 -0.903781 -0.169144 -0.713668 -0.964771 -0.798418 -0.269518 -0.770560 -0.531808 -0.897859 -0.394531 -0.213066 -0.447570 -0.434114 -0.426460 -0.344461 -0.899396 -0.170898 -0.368983 -0.237487 -0.598636 -0.293963 -0.033741 -0.206195 -0.693094 -0.915103 -0.837101 -0.413478 -0.053292 -0.724295 -0.947814 -0.815320 -0.391652 -0.277518 -0.624189 -0.059760 -0.278338 -0.845664 -0.363976 -0.286371 -0.208014 -0.677825 -0.025906 -0.367672 -0.646392 -0.024433 -0.409118 -0.526730 -0.243991 -0.822371 -0.042231 -0.197614 -0.802833 -0.905236 -0.912751 -0.610020 -0.101178 -0.261922 -0.121618 -0.340466 -0.524426 -0.645806 -0.936055 -0.478676 -0.722984 -0.125466 -0.800347 -0.129849 -0.318480 -0.601121 -0.579589 -0.528000 -0.128708 -0.937106 -0.697985 -0.974214 -0.560673 -0.091105 -0.924714 -0.677396 -0.926323 -0.209025 -0.654194 -0.302125 -0.287869 -0.291216 -0.596978 -0.047842 -0.426179 -0.099754 -0.487801 -0.886903 -0.655554 -0.943149 -0.309006 -0.922605 -0.444814 -0.536254 -0.185291 -0.035567 -0.774329 -0.927604 -0.492154 -0.222006 -0.326314 -0.522378 -0.363619 -0.380854 -0.979890 -0.636134 -0.907489 -0.976134 -0.019335 -0.996905 -0.938144 -0.818545 -0.873900 -0.400084 -0.911575 -0.120851 -0.967703 -0.878178 -0.598871 -0.660644 -0.622245 -0.583428 -0.800388 -0.877120 -0.041231 -0.513953 -0.136413 -0.443901 -0.852292 -0.699613 -0.800019 -0.439723 -0.145976 -0.211117 -0.629279 -0.281111 -0.882540 -0.085172 -0.630192 -0.498508 -0.664420 -0.540131 -0.595225 -0.339431 -0.967704 -0.524486 -0.914958 -0.762400 -0.026111 -0.865797 -0.775479 -0.285351 -0.803662 -0.043712 -0.005671 -0.841956 -0.244604 -0.976018 -0.121712 -0.500567 -0.240331 -0.942249 -0.895756 -0.329581 -0.245447 -0.597272 -0.013739 -0.502473 -0.258401 -0.760045 -0.967144 -0.693425 -0.879629 -0.610318 -0.213941 -0.856039 -0.349233 -0.864209 -0.806626 -0.982050 -0.823519 -0.963242 -0.930634 -0.915217 -0.513663 -0.833168 -0.958342 -0.012606 -0.641603 -0.995151 -0.022324 -0.311416 -0.273694 -0.492060 -0.837339 -0.740805 -0.654606 -0.602852 -0.715779 -0.327409 -0.930570 -0.079322 -0.825642 -0.413422 -0.111239 -0.058745 -0.963758 -0.012090 -0.295045 -0.505649 -0.627871 -0.758681 -0.583320 -0.224103 -0.356166 -0.490404 -0.247047 -0.918394 -0.971251 -0.890531 -0.926336 -0.328512 -0.234239 -0.924757 -0.179540 -0.946404 -0.167256 -0.420269 -0.590096 -0.491608 -0.095472 -0.752942 -0.343705 -0.388588 -0.474846 -0.523703 -0.044774 -0.370362 -0.740116 -0.718227 -0.581804 -0.801553 -0.688312 -0.374708 -0.821075 -0.613002 -0.489801 -0.540510 -0.243769 -0.657570 -0.526333 -0.731429 -0.855915 -0.365528 -0.387596 -0.086928 -0.750037 -0.854258 -0.074033 -0.631819 -0.778000 -0.359305 -0.227073 -0.449621 -0.258706 -0.149064 -0.965846 -0.889814 -0.168339 -0.407718 -0.736552 -0.395252 -0.114041 -0.596430 -0.970437 -0.416088 -0.974542 -0.252051 -0.960625 -0.340323 -0.899128 -0.320889 -0.848664 -0.716187 -0.136291 -0.875715 -0.165736 -0.480501 -0.349938 -0.507887 -0.638744 -0.599216 -0.421602 -0.712778 -0.617678 -0.798719 -0.307057 -0.810032 -0.535590 -0.163422 -0.189424 -0.732748 -0.931416 -0.934642 -0.692611 -0.521670 -0.976660 -0.703737 -0.586448 -0.812751 -0.752173 -0.480310 -0.787476 -0.66707682754441 -0.43670142195167 -0.56645521883267 -0.53408369911455 -0.34482018044668 -0.31652690370551 -0.75517067452860 -0.45300084248869 -0.33778688953221 -0.67209304679213 -0.46671783842377 -0.66259152963123 -0.01699590672049 -0.87925433182299 -0.69188450559362 -0.66779152513367 -0.96378923184650 -0.17962093658776 -0.95238497875678 -0.74627539187575 -0.22346889824725 -0.62852866289457 -0.21910478352556 -0.20867131224550 -0.06155872431448 -0.35657012481090 -0.10739150985387 -0.06638033105414 -0.50449401660477 -0.62881694251570 -0.48127344748763 -0.94856202870789 -0.80005643344980 -0.63433189653540 -0.69916830663025 -0.32911232337234 -0.80587652813523 -0.96300132600866 -0.86252611018656 -0.68978662621525 -0.20096781231689 -0.63876251642133 -0.88422582440667 -0.21011147974345 -0.66895323870871 -0.41403953910235 -0.14074915093113 -0.45997389615835 -0.69700543956045 -0.12492363465322 -0.74607995037758 -0.06221785424712 -0.02084791633721 -0.53944789206015 -0.08967209041199 -0.57014099144787 -0.03779209757307 -0.93166428068532 -0.27088544504549 -0.71896214543780 -0.23171961851796 -0.26206623061649 -0.79773318330927 -0.22284386118363 -0.87258541128883 -0.72610829123422 -0.26618660541790 -0.49921282371595 -0.99657649208531 -0.82726094046318 -0.65472081726931 -0.97181939335282 -0.30934330531417 -0.36042289399654 -0.55036800599586 -0.57964420962000 -0.01246071809742 -0.88627285697303 -0.04801530649934 -0.33909040774559 -0.79500742837331 -0.65839516723810 -0.71469343570742 -0.69806976425468 -0.64916241019781 -0.24457430085246 -0.73536590345774 -0.29003670710231 -0.50049856407797 -0.32641080266478 -0.31684038840911 -0.33651204989570 -0.68846557277559 -0.27644593103857 -0.24516328251982 -0.33353133680944 -0.08509924984171 -0.44881998839320 -0.15586331168693 -0.80664302085516 -0.52296465915073 -0.75709452746990 -0.08563740386389 -0.85917421244818 -0.50463377931945 -0.34675350093347 -0.61906668740917 -0.61378953136048 -0.25652865941527 -0.68411273766380 -0.04332471839323 -0.55331145854461 -0.25396372633300 -0.37206253374193 -0.20823823021041 -0.76418555588778 -0.37269720281050 -0.15712700912768 -0.45914466484685 -0.93864551092154 -0.36271143329343 -0.52340057509897 -0.86026447092796 -0.33656100312910 -0.22858719212171 -0.84279743343383 -0.03548690347994 -0.51768219627226 -0.41004489346959 -0.79748284309100 -0.87899907794547 -0.20272961663145 -0.69380929576283 -0.26559889710446 -0.20003608565342 -0.43472179980206 -0.65311675488312 -0.64790294493621 -0.26372814842328 -0.20671151195699 -0.27358482219935 -0.00751042736980 -0.86458955854952 -0.23405137499808 -0.17799032812763 -0.62707335613358 -0.33019348421209 -0.66418943249386 -0.82815404270131 -0.12806832970229 -0.71360930136537 -0.15703923185854 -0.15996150517220 -0.47185004838974 -0.70182011572814 -0.85097583929742 -0.33574257238013 -0.21945548302139 -0.88996728125244 -0.26176499077587 -0.91333136045279 -0.19108794111203 -0.12458590264380 -0.86884485394596 -0.65729438626171 -0.98558709742766 -0.68398308590939 -0.54396600516259 -0.70696355694135 -0.59860690163410 -0.21028939182566 -0.91613768530596 -0.07918899699830 -0.40328719274037 -0.44011797073979 -0.79539809912375 -0.50800250615169 -0.66455091031377 -0.38807567615874 -0.79698925801870 -0.70847705649232 -0.54915242164691 -0.97790425797076 -0.52200508502212 -0.91093084725844 -0.35450121557906 -0.80850137471968 -0.98595183243986 -0.76187570739637 -0.67233248572340 -0.41091429212289 -0.11883047616137 -0.46900907616483 -0.79948524093832 -0.86200107493134 -0.73045082998953 -0.84381668761388 -0.94146692242353 -0.58308558664078 -0.53950825531963 -0.29898133021268 -0.39003970204974 -0.28551322621566 -0.03866210028434 -0.11702211097987 -0.55895752134364 -0.62258630670855 -0.18222361361407 -0.94061355914180 -0.64864456580546 -0.94168077351806 -0.02983071947857 -0.70759677866605 -0.28658716078875 -0.23594758146864 -0.11241765375836 -0.80235161928622 -0.45318390403250 -0.56976557293665 -0.38236562699159 -0.99999612451006 -0.99229086263792 -0.36764628425793 -0.28161359878830 -0.61878736839957 -0.47354480288347 -0.54075522850625 -0.19696681299825 -0.98617879409507 -0.30388298313849 -0.70995497025748 -0.92307242751514 -0.73639445865720 -0.72587815123612 -0.68788070568693 -0.74206799395073 -0.43511798069132 -0.17089268850060 -0.37532997052567 -0.73472314188609 -0.85618981743408 -0.23725809963981 -0.49120960280093 -0.14706546307850 -0.60182153682623 -0.87671069117582 -0.04473499349400 -0.16244547842406 -0.04211678988415 -0.29807710256149 -0.00107930545142 -0.06766165569313 -0.31435686905174 -0.25520803701138 -0.48983868387348 -0.94187844534931 -0.88001363529777 -0.94669837062158 -0.15533739418443 -0.45323790727144 -0.51290092956307 -0.44847433562220 -0.02140264210172 -0.15630767719577 -0.86044311769900 -0.17559796316735 -0.13175102039317 -0.48018204748956 -0.98771102872480 -0.41899646466337 -0.57129380867374 -0.17893041811889 -0.18967996864111 -0.55218721553259 -0.62023488789449 -0.80916925737564 -0.59360518373791 -0.40028727450593 -0.91710445560819 -0.56976888377593 -0.81159836319503 -0.80575619477458 -0.61289833861667 -0.87709624219579 -0.08754286588931 -0.10018329432392 -0.07843914335774 -0.45078336453720 -0.61466298905540 -0.62008152831281 -0.34091300815601 -0.74957804633591 -0.21823872539742 -0.84865892498356 -0.83468696928555 -0.35757486341397 -0.18909585745148 -0.36047190805376 -0.74793949015339 -0.12496447636262 -0.41631253597594 -0.06168852543626 -0.88406715968314 -0.55789805815970 -0.22764052778309 -0.38093143189470 -0.28659670625261 -0.66169034780781 -0.33349910681214 -0.00247879690264 -0.53206685754328 -0.34277232617815 -0.24077247445346 -0.52130518971696 -0.31690103698101 -0.68863562121243 -0.33635459653690 -0.60922781553320 -0.02506872539119 -0.67598365357095 -0.73419497186379 -0.65581392810606 -0.14944149848016 -0.67575067449460 -0.65013851618376 -0.54641106252886 -0.01427137716044 -0.58686597084429 -0.96032822886257 -0.20659414041577 -0.47921214549125 -0.31681990690629 -0.99270716889619 -0.18190546835945 -0.97214191365411 -0.79079892610870 -0.25886359515349 -0.97875019529459 -0.97380590453067 -0.60718457208527 -0.68678375683778 -0.48752908855866 -0.64656203747366 -0.63049151283347 -0.49970772726916 -0.14327813303035 -0.70277839747038 -0.62225670317306 -0.37167593529117 -0.15109001230160 -0.24895833975093 -0.78426004231119 -0.88457792646492 -0.31854655548182 -0.64149304819267 -0.89335117432318 -0.35502496856858 -0.42733568902244 -0.57007062542825 -0.00919063946116 -0.62300154585319 -0.92993939055221 -0.66761175620262 -0.12917363886286 -0.32132563679970 -0.80824923825512 -0.38507927949566 -0.28331030568599 -0.64183508323654 -0.67940977859476 -0.82681695568424 -0.09657383982305 -0.82549603486606 -0.19383729312704 -0.69939007754886 -0.08589514275225 -0.76011288739000 -0.88981808138101 -0.69632472573335 -0.66515145015357 -0.84131150807540 -0.84018346458432 -0.51208289678165 -0.51817154799097 -0.16129287078102 -0.69658915768344 -0.32254091541901 -0.37266833210475 -0.33543049388915 -0.77040581375174 -0.41271456789353 -0.31160727812996 -0.63754667178633 -0.07151208435725 -0.10112789111170 -0.86451906615495 -0.45196091319656 -0.71825244082051 -0.79782212575289 -0.37005277402506 -0.93542927679681 -0.46249993457317 -0.85041608175733 -0.06292647733768 -0.48141675075374 -0.47902887932002 -0.54490612011356 -0.65776573766857 -0.22774864633350 -0.85616914421321 -0.41711320109365 -0.93659511836988 -0.30460424330078 -0.54420600288926 -0.51426979015314 -0.15170535911616 -0.49157885805067 -0.21727610156878 -0.97429552359056 -0.19854613668419 -0.77645154950717 -0.67786805694953 -0.27543842443902 -0.64580014572443 -0.92987039072280 -0.25864632579496 -0.26239829609823 -0.19211175322058 -0.20440734967767 -0.33186309644813 -0.38323947146284 -0.53571353463313 -0.06307918673434 -0.73630475380790 -0.22580971060458 -0.28535796223783 -0.86383611993736 -0.35268557797844 -0.19085509841494 -0.95186797529562 -0.50734774893903 -0.56899074902343 -0.69552115106600 -0.62135428215553 -0.36798100307879 -0.84816696791066 -0.86739608487791 -0.29921317753968 -0.91003685030742 -0.64739902367189 -0.24898048938103 -0.70818794159043 -0.90127604886670 -0.07705827536448 -0.78237334964088 -0.38208865726836 -0.38291106908472 -0.85150872553993 -0.31116424700736 -0.78073607774376 -0.02932542494809 -0.70614387018278 -0.91499002390368 -0.76863861591799 -0.22676892963869 -0.94064617177479 -0.38088542783609 -0.23171424421995 -0.99677410272065 -0.29238734907861 -0.70733802864552 -0.92483039135327 -0.09846023302220 -0.57004173367141 -0.91313418530187 -0.41429363297269 -0.25109866810243 -0.05294554629500 -0.70360457405017 -0.48940125648699 -0.32180464161190 -0.27046121241532 -0.88306425959198 -0.16648620752691 -0.54959042799151 -0.73925723913255 -0.75850946322481 -0.48171865432187 -0.32506611349735 -0.11952899412352 -0.45063237089665 -0.40274581162701 -0.71819344658394 -0.06722332286302 -0.48939555003478 -0.18053002458094 -0.64306721337170 -0.64203832975217 -0.12266818285040 -0.69096442645785 -1961593022 -2058123164 -304465401 -1596182158 -1317827193 -37312776 -1710348730 -321176464 -548892099 -374073910 -686123613 -824980045 -374560385 -898230183 -587356093 -653208534 -1717614279 -1798552902 -607067031 -311577143 -802144035 -1768240837 -667268521 -1300935595 -1320489242 -588779042 -424844546 -597998467 -2084640032 -1419226786 -1311969003 -2061391578 -1968303047 -649108449 -140663167 -1845945341 -1587583795 -1948400831 -904785550 -1460005325 -1185029470 -1621046861 -922274779 -895088647 -1318188395 -779630936 -1042195180 -1115622271 -357993515 -95351369 -1888523691 -502957515 -1121894322 -444358002 -1194554281 -565815714 -1259131080 -1835213294 -1178703369 -1367738957 -1721015722 -1638510758 -1398181812 -131111728 -754040484 -419105024 -1813243660 -1096106616 -1898515309 -1717316185 -1169927969 -1682797758 -1421531912 -32184556 -1576227289 -1965971987 -1435271145 -1959385169 -1595278458 -186639063 -1157825026 -121380000 -1844286330 -1401720290 -1734430958 -13982192 -217504713 -1327826769 -548718350 -1088227171 -320699184 -1826457792 -1355139154 -1858435884 -365057286 -1744972202 -580124221 -2112853481 -567666065 -1282428089 -1228708940 -424114392 -516600756 -1072297779 -161166897 -2055535810 -1483643640 -853505264 -1486864929 -7464951 -238673170 -18957402 -1351215569 -2065167307 -1885264559 -2038152168 -104196380 -1835450499 -893419649 -186618461 -842957567 -1689076273 -672071078 -1019322292 -626176346 -77538727 -1562591571 -1116250060 -552917176 -84479510 -348878344 -696362 -1557130422 -520575737 -1788839721 -1862713708 -917020369 -240806822 -1678044546 -448885613 -1103964674 -440632845 -1140255025 -2010811440 -2037053227 -1602150360 -1941326522 -1657240736 -284845518 -2067794723 -1479592390 -400887705 -1040493538 -1265058804 -769363005 -421277251 -932166349 -450902356 -1029425901 -900326238 -497392476 -1514374107 -467603155 -102597076 -1402703629 -1640901326 -1729708475 -253896737 -890744115 -1413293551 -195470254 -731400149 -635754856 -1135622914 -2116101375 -1207958628 -1048773999 -533224416 -1783933364 -1069377032 -282068853 -1301322252 -1142678914 -1080940249 -634768786 -551735117 -1357583794 -794181935 -444257450 -392936031 -1602380176 -1013726377 -341595908 -1191376433 -944803925 -24239601 -713858690 -2057623794 -1716700195 -899258752 -1479592390 -400887705 -1040493538 -1265058804 -769363005 -421277251 -932166349 -450902356 -1029425901 -900326238 -497392476 -1514374107 -467603155 -102597076 -1402703629 -1640901326 -1729708475 -253896737 -890744115 -1413293551 -195470254 -731400149 -635754856 -1135622914 -2116101375 -1207958628 -1048773999 -533224416 -1783933364 -1069377032 -282068853 -1301322252 -1142678914 -1080940249 -634768786 -551735117 -1357583794 -794181935 -444257450 -392936031 -1602380176 -1013726377 -341595908 -1191376433 -944803925 -24239601 -713858690 -2057623794 -1716700195 -899258752 -605086814 -1131528105 -1850285002 -157538708 -1693930696 -1861460523 -535597249 -1680931216 -60050938 -875439901 -847147123 -2034268809 -2071723302 -1480294277 -1543000361 -576588008 -328508648 -353998495 -1257696987 -1500891757 -833190009 -2038618810 -473850805 -2145409406 -265876274 -2023369184 -24742435 -1871473403 -1501135921 -2007608235 -2096968904 -1979289910 -669266309 -987358740 -362895445 -1444187483 -646632638 -1747229087 -463184332 -1350777785 -373136403 -1317013730 -1799881304 -716658397 -593429446 -784240049 -1469019488 -1994252882 -269783886 -1028253893 +1344404273 +1971277308 +290254454 +1083372102 +895084232 +729814190 +624854114 +899912958 +257245571 +740331159 +307398963 +1146378559 +564320757 +1024779462 +1722493988 +629853638 +1467242619 +1123333445 +674786328 +1945686069 +1038818467 +1377383964 +1508592143 +1591781294 +751309967 +1287962425 +2024796058 +80440979 +1589263475 +218971170 +26882841 +2060952703 +2062276123 +1949546003 +452184916 +693844543 +286574064 +2079184783 +883182482 +1285429140 +1358476124 +1681488844 +423007346 +594894998 +236446631 +1270172052 +392193194 +2057970022 +1389147619 +1613926128 +1415911066 +863754398 +176193777 +116183920 +553831988 +2129269519 +920281116 +816643758 +211608358 +667893922 +1013642387 +925903694 +1354637784 +1195408961 +405550226 +1160723497 +694730397 +453821204 +949196364 +945410040 +1662945891 +1382219580 +2043159770 +996618570 +178120018 +653579137 +820727623 +661270676 +2141607972 +957828023 +15599396 +934123276 +405498384 +1463894368 +1596350686 +1383971408 +401806818 +1899097687 +1435392747 +280044166 +451535797 +667891553 +328081257 +1404838802 +1372423908 +679494027 +1862006328 +2056473173 +269394493 +336138917 +909032177 +581660988 +314791878 +1175454363 +1663824789 +1975897213 +782860028 +947600045 +2056631522 +554900845 +958491825 +467464269 +1084419666 +324193819 +328410499 +925474559 +1110871928 +1813339558 +1629371405 +283333840 +1729397961 +699054089 +1676777235 +80120204 +563439214 +1123433668 +1571384470 +795397952 +1163568631 +1173697950 +875025470 +1270724394 +2074362053 +1991114956 +1924898827 +395467548 +1317995558 +835453867 +45848263 +490734899 +1254527314 +1166014910 +925010564 +1754993348 +1030617174 +515621579 +239727235 +312935503 +247970997 +2041231128 +807800855 +953023582 +935038439 +981096876 +433096946 +2121283663 +581202621 +1744378620 +828052051 +74082531 +757117088 +1470977045 +1226866639 +919321941 +2004121677 +883266750 +1785905196 +1773006200 +1364307522 +1538266683 +18772703 +789553563 +30980478 +1663359184 +2146435145 +662331959 +1757759233 +1033484021 +455632505 +290497330 +274470917 +422036712 +1189625250 +287261904 +108395007 +1351218821 +66569817 +1195242004 +1556977983 +179426526 +1267893111 +1760372829 +1817116431 +1075643649 +886526580 +919660953 +1321658356 +1722851223 +1609870321 +1978721730 +387611524 +571857310 +512754693 +594766505 +1586894221 +378514589 +705833231 +93189042 +574533467 +796035982 +618717082 +709622129 +1016621500 +769517324 +380070887 +884625363 +836560510 +717589286 +1760589264 +1752652145 +2012213828 +511359954 +1668989206 +1511804370 +625680404 +1239422926 +1462724929 +1363508673 +306812441 +3732111 +1531256075 +1081221917 +1743679436 +393721496 +34533623 +708088293 +1318475436 +102690723 +1171438382 +1467368976 +1391083255 +1102642459 +1336047243 +1621780307 +1371606554 +574540705 +1124015787 +927493373 +308200721 +1423045818 +672893583 +580263407 +457222401 +1029658533 +1776369839 +1835365956 +1170624327 +284752306 +2017154155 +610578098 +1141504663 +1262509647 +203926253 +1116964753 +208874102 +1179208379 +1603588990 +277718350 +1943719683 +1024149981 +1798173807 +1642621551 +1011879675 +2103040509 +1085044987 +716654720 +1508350038 +494027439 +480853088 +1944413426 +1147135970 +1157923848 +606027416 +99936483 +855056188 +1003971078 +1984960014 +772703801 +848514041 +1229059881 +1528038590 +638511859 +557013705 +1832400779 +1475322199 +1086818332 +743119971 +382299528 +968193075 +159961919 +1542723225 +25698362 +1988262367 +2018002873 +1936123554 +195327859 +657935247 +243670217 +1638126310 +1745855456 +1714186832 +2044971910 +1825844872 +681215965 +744580311 +1431909696 +617135926 +45883337 +404305660 +1418128758 +1696570016 +956993983 +1708546581 +15474574 +889607394 +1443832571 +906917449 +2006716320 +1406930240 +629365879 +1414409921 +733909111 +1657513754 +966853919 +103339508 +514184032 +1969441535 +1997515329 +585668431 +625417594 +1862889323 +1870417561 +30924413 +1121835174 +1000765102 +355482564 +134853724 +1233312675 +610694819 +92486554 +916554444 +1828453247 +201525650 +1131865759 +354840432 +2145379507 +250659414 +801197096 +2018786822 +78703238 +378982443 +1801681229 +1727827390 +1039879051 +615759336 +1759083332 +1202452667 +1908062337 +1197994628 +1828948812 +95424944 +1640450411 +828149985 +697423169 +1508613549 +1382079153 +1784539927 +1475773024 +1029085082 +1791303007 +1162136830 +583260098 +61759169 +1784938377 +305061817 +1653715166 +352382817 +857098300 +1625462612 +1481157488 +2042510187 +1524384019 +1504355392 +2065236858 +1840819437 +654648808 +153274497 +1150747834 +1153036354 +450218012 +1681901621 +1858459529 +1294988750 +1044913750 +1126516198 +778637056 +395295075 +1569926001 +1656974970 +1771840527 +1093679503 +299630624 +1724524913 +59638046 +663677881 +2025638847 +1613241068 +558081481 +669446626 +1469995534 +12318760 +1703817809 +1726527454 +1574550754 +2096330888 +88695219 +1136618393 +159529883 +459463337 +1878572988 +1746359419 +1922251707 +836786879 +234170641 +1388749363 +67486428 +606008713 +379090882 +1014454838 +1870606359 +493659301 +255397772 +1779960663 +1648318975 +1056415637 +1053562861 +946641171 +1638701732 +1484378635 +166919624 +73933550 +127478512 +67049277 +2141739038 +1383757011 +1277505226 +217627134 +1729686702 +215836453 +507829502 +1297262388 +1065023423 +1166162663 +2118370625 +1600373301 +582356622 +518727986 +1057479645 +1139371156 +760451006 +1298553848 +493656176 +755063548 +1221540431 +2066178339 +2107003517 +973995769 +1008442424 +664996150 +1643034021 +1997144721 +888214295 +1455347431 +1747211104 +953974185 +1854727271 +51950094 +1969226547 +385350350 +1353384322 +1556125725 +1351329627 +575727567 +1810222152 +616117321 +1817150626 +2099005577 +1513033110 +1194491985 +34369753 +0.556365 +0.464570 +0.988374 +0.578140 +0.951955 +0.577156 +0.849277 +0.242430 +0.334194 +0.057300 +0.446225 +0.873265 +0.942439 +0.953111 +0.411449 +0.113237 +0.187278 +0.294615 +0.818375 +0.780273 +0.951770 +0.013072 +0.323974 +0.512235 +0.362725 +0.363430 +0.275777 +0.123226 +0.652680 +0.994410 +0.086023 +0.777441 +0.479927 +0.669029 +0.682351 +0.394146 +0.886341 +0.029105 +0.737987 +0.879878 +0.280079 +0.913448 +0.227181 +0.894477 +0.486361 +0.420041 +0.065549 +0.557863 +0.062585 +0.260766 +0.809889 +0.726972 +0.726049 +0.190116 +0.906481 +0.514734 +0.036951 +0.933179 +0.751360 +0.438607 +0.578829 +0.582993 +0.547446 +0.953132 +0.197733 +0.810112 +0.685195 +0.663330 +0.581476 +0.852351 +0.750613 +0.850654 +0.766051 +0.092521 +0.443414 +0.175103 +0.702127 +0.296415 +0.129511 +0.401560 +0.335992 +0.658406 +0.028530 +0.382178 +0.243521 +0.269750 +0.220765 +0.144021 +0.503041 +0.461049 +0.589106 +0.528974 +0.543907 +0.401842 +0.848025 +0.546879 +0.153792 +0.871680 +0.783100 +0.319127 +0.881548 +0.054978 +0.240050 +0.668867 +0.773522 +0.615138 +0.460975 +0.112203 +0.255110 +0.843256 +0.495164 +0.820179 +0.658619 +0.311778 +0.569426 +0.998841 +0.659705 +0.987240 +0.670992 +0.938948 +0.145920 +0.240706 +0.321197 +0.603820 +0.845679 +0.352306 +0.189999 +0.881878 +0.406841 +0.915780 +0.600408 +0.977865 +0.949506 +0.677976 +0.999998 +0.275047 +0.287840 +0.949228 +0.070744 +0.802020 +0.391978 +0.907116 +0.677658 +0.574524 +0.706702 +0.752933 +0.260338 +0.999984 +0.553907 +0.308594 +0.292198 +0.149311 +0.962380 +0.463041 +0.405696 +0.337848 +0.414911 +0.022559 +0.176959 +0.469133 +0.110039 +0.154065 +0.699369 +0.870109 +0.314921 +0.541116 +0.718871 +0.287507 +0.980954 +0.559291 +0.105017 +0.871972 +0.709174 +0.371855 +0.609523 +0.497115 +0.474982 +0.186873 +0.390046 +0.673785 +0.251868 +0.320715 +0.410845 +0.830038 +0.579706 +0.165204 +0.861112 +0.298581 +0.975676 +0.549081 +0.025104 +0.950148 +0.981877 +0.074374 +0.771066 +0.835633 +0.224579 +0.528940 +0.795009 +0.390040 +0.455583 +0.944649 +0.676607 +0.924170 +0.722930 +0.003352 +0.917310 +0.199162 +0.506158 +0.131757 +0.605962 +0.774411 +0.394792 +0.738743 +0.535345 +0.700964 +0.881903 +0.201232 +0.942461 +0.399838 +0.186060 +0.230631 +0.853556 +0.427495 +0.055923 +0.985979 +0.761894 +0.672840 +0.624820 +0.570923 +0.864983 +0.487831 +0.471306 +0.983926 +0.965564 +0.608061 +0.423419 +0.744052 +0.829526 +0.085885 +0.716205 +0.617752 +0.076796 +0.093574 +0.476120 +0.672465 +0.395681 +0.329645 +0.935817 +0.080442 +0.961491 +0.840832 +0.246548 +0.697949 +0.720137 +0.246161 +0.101111 +0.010964 +0.757919 +0.140282 +0.349373 +0.369731 +0.144995 +0.948966 +0.180601 +0.147219 +0.242224 +0.615737 +0.126176 +0.622113 +0.698421 +0.869097 +0.256896 +0.503387 +0.364886 +0.185977 +0.081276 +0.700407 +0.828774 +0.725358 +0.888289 +0.175982 +0.763644 +0.147136 +0.063501 +0.315750 +0.420633 +0.823039 +0.210119 +0.003502 +0.162781 +0.247427 +0.340346 +0.857208 +0.730889 +0.254988 +0.546633 +0.390497 +0.791511 +0.485924 +0.283397 +0.607676 +0.497457 +0.485160 +0.346415 +0.571326 +0.988003 +0.896707 +0.909368 +0.032770 +0.898584 +0.240087 +0.855993 +0.808528 +0.548880 +0.904694 +0.609347 +0.941593 +0.585342 +0.468322 +0.028794 +0.890791 +0.620120 +0.285701 +0.985859 +0.533735 +0.291378 +0.329344 +0.019415 +0.110826 +0.656740 +0.445437 +0.555885 +0.286938 +0.230966 +0.096156 +0.979198 +0.641853 +0.311523 +0.637631 +0.244436 +0.140502 +0.248634 +0.413755 +0.275295 +0.715571 +0.306643 +0.928175 +0.879426 +0.476133 +0.064039 +0.265420 +0.623167 +0.790017 +0.486200 +0.255699 +0.367829 +0.072442 +0.752906 +0.146597 +0.211205 +0.382453 +0.106569 +0.766809 +0.994993 +0.488874 +0.673493 +0.093841 +0.081955 +0.484671 +0.939592 +0.234405 +0.839118 +0.371347 +0.936747 +0.878662 +0.762438 +0.497614 +0.241631 +0.346110 +0.667393 +0.238548 +0.964985 +0.548044 +0.706433 +0.156751 +0.450895 +0.747294 +0.505023 +0.147009 +0.763300 +0.526743 +0.966622 +0.775326 +0.075134 +0.850813 +0.546348 +0.716117 +0.606450 +0.764861 +0.565164 +0.232192 +0.887247 +0.738029 +0.753110 +0.013010 +0.222637 +0.300216 +0.481673 +0.023479 +0.280923 +0.381830 +0.508857 +0.722632 +0.008241 +0.216166 +0.949090 +0.440561 +0.690099 +0.876038 +0.699696 +0.368696 +0.960746 +0.771743 +0.966088 +0.843554 +0.915028 +0.168329 +0.933063 +0.948936 +0.685973 +0.721296 +0.768305 +0.286345 +0.346782 +0.783534 +0.679570 +0.975080 +0.999663 +0.455780 +0.081140 +0.835590 +0.588488 +0.927249 +0.470078 +0.490836 +0.897980 +0.281317 +0.012735 +0.092694 +0.594129 +0.425354 +0.373070 +0.292350 +0.961893 +0.676502 +0.948787 +0.588270 +0.339951 +0.271071 +0.257900 +0.895763 +0.839618 +0.695309 +0.971764 +0.385455 +0.049776 +0.092051 +0.265841 +0.632942 +0.580560 +0.651059 +0.897529 +0.642173 +0.360060 +0.277537 +0.414824 +0.698736 +0.645108 +0.023722 +0.163647 +0.805548 +0.507287 +0.388646 +0.829317 +0.459725 +0.335222 +0.808159 +0.038340 +0.849234 +0.530963 +0.011742 +0.727507 +0.422920 +0.214055 +0.718802 +0.087040 +0.254013 +0.880395 +0.127240 +0.85946695012587 +0.80056548692219 +0.39640787665780 +0.30348170192968 +0.97470308936659 +0.15183935089797 +0.80678229168707 +0.41596220466227 +0.46882840344583 +0.86467446685724 +0.88383852316380 +0.13910334436739 +0.51046210289985 +0.87410538081039 +0.43094011194741 +0.63968490852616 +0.33074547539987 +0.68302758839059 +0.28935077937821 +0.63981321390559 +0.96026837233886 +0.23811802199661 +0.11015051038739 +0.10228639123466 +0.42445707407712 +0.91892284528194 +0.34949370893663 +0.44087992840965 +0.07803874208123 +0.88262629989268 +0.60435421591064 +0.09281185965636 +0.71896288616325 +0.92521185176017 +0.07977189520257 +0.35379194231503 +0.30686128098497 +0.13939489354464 +0.91354304826045 +0.00239357327978 +0.89315284029164 +0.20755006448190 +0.80886747166137 +0.01223880374289 +0.27529479061168 +0.94885097548783 +0.88115642112811 +0.93601717172543 +0.97920099319651 +0.40692646552672 +0.28335740759159 +0.15193030046281 +0.52964895791582 +0.99236862384579 +0.39072970134332 +0.80892471991117 +0.66648069833687 +0.91860444149815 +0.93444964756581 +0.07700984911627 +0.19336476684994 +0.17254322252082 +0.33287036817726 +0.97530524855316 +0.02218692404079 +0.23647534577431 +0.82912597594910 +0.73396996587774 +0.95067069730043 +0.59470032664439 +0.18775462415836 +0.98948597084984 +0.98837499763500 +0.90422865807413 +0.63285132384081 +0.52649098010234 +0.77084279037276 +0.34835483881441 +0.74425879181949 +0.31627147315073 +0.39750202262375 +0.33600293010495 +0.27267557469964 +0.45294888366820 +0.37136739215805 +0.38240828232189 +0.72709027138574 +0.82911364323873 +0.81013993419170 +0.31047173417153 +0.11150243546357 +0.01872270340904 +0.65122285389416 +0.96533210099204 +0.07707090000422 +0.16315897867070 +0.18968465844986 +0.04513422410788 +0.54245412541945 +0.99834484551506 +0.19695437442412 +0.97634304967117 +0.49752501217347 +0.46339180836231 +0.92345651920539 +0.36119290353744 +0.62031737954453 +0.39639455474976 +0.51532146673407 +0.67559715285917 +0.06697862119140 +0.32714987412626 +0.00859764979173 +0.46307743364810 +0.45561644242125 +0.92600053170868 +0.87481932968075 +0.39712263331300 +0.66137359332269 +0.27162687728351 +0.93750666321480 +0.66078939867512 +0.80970984784050 +0.24849411903893 +0.46339573449724 +0.72413333835416 +0.89448935763164 +0.62521852945918 +0.28313638059790 +0.12269538994015 +0.80739956549571 +0.66250024791868 +0.09593994446749 +0.77215721048367 +0.77220170160662 +0.28316501029737 +0.90161074733187 +0.70147580958018 +0.30908784046016 +0.51723922330905 +0.28775894734101 +0.97178344688766 +0.62575423884819 +0.51542045411449 +0.74676570938357 +0.23819615512637 +0.70002304649226 +0.15057761347154 +0.60006375258574 +0.63112755508236 +0.55170698141761 +0.35850302853081 +0.37264263691868 +0.21435461387003 +0.02493232321893 +0.55130545599559 +0.43074249503634 +0.83507103750842 +0.73099197195015 +0.79720389216208 +0.03468113499158 +0.94950186840938 +0.63193396197243 +0.08450410350550 +0.18749560326950 +0.11407333649404 +0.70942111560032 +0.41480670603759 +0.08237400640921 +0.54266862789824 +0.18836253198059 +0.45539663771361 +0.36134790270536 +0.10665120831904 +0.61781824432736 +0.29373945174788 +0.61880511508321 +0.80597079738558 +0.04193730103877 +0.45777591709970 +0.78525237493057 +0.90739536187589 +0.22809322953320 +0.83230042596123 +0.85618984265886 +0.68122838123657 +0.83103891413751 +0.90767180519304 +0.14890630237246 +0.88719391199446 +0.98611578951938 +0.46214011945379 +0.75160953343117 +0.13398905613895 +0.16346613525851 +0.43303339109780 +0.34892176138497 +0.50702282492501 +0.97631422050038 +0.93911765305029 +0.42636173516627 +0.65485309931944 +0.22952002002581 +0.71331893721531 +0.78268716214510 +0.86641236755804 +0.56481786578417 +0.28671003623434 +0.95615602185464 +0.75723798426711 +0.25874970573985 +0.55237167659562 +0.96591099186892 +0.35145791890784 +0.52075056348867 +0.81978471983402 +0.94264769768073 +0.22671495147598 +0.71736867806491 +0.49601322222352 +0.26486393147445 +0.51351841999509 +0.01454799240635 +0.04353412037532 +0.02860247127062 +0.02841255233654 +0.49618141751992 +0.14770945990786 +0.85147523337192 +0.14751009683938 +0.16193010351461 +0.59463235725218 +0.17244194835469 +0.85241662900740 +0.39121635935361 +0.43060632824598 +0.15210475353851 +0.32025952301746 +0.11885676522209 +0.90883511166407 +0.41349462471682 +0.02710297992735 +0.50462328235337 +0.97311077202069 +0.14548304106656 +0.09000237643191 +0.32637376266085 +0.73140002168361 +0.25421256360450 +0.66124968707229 +0.84082228972246 +0.58059365452682 +0.17838947416790 +0.09666475154608 +0.11424099049151 +0.99754656359987 +0.07215969777675 +0.04678411506190 +0.41273479283618 +0.56392632739435 +0.94351912744514 +0.35461403274363 +0.68804698080462 +0.68693652178112 +0.11815054430796 +0.80969919454586 +0.04977707560794 +0.45585533049243 +0.76244201016829 +0.26588020696119 +0.28692575805366 +0.07156898425345 +0.50877163076699 +0.78787604366826 +0.06086863628077 +0.83916967653645 +0.58712064686126 +0.26287989406865 +0.08490745519403 +0.01403989849807 +0.00632466724933 +0.81911777066838 +0.44176692587976 +0.19611076015327 +0.04855708030016 +0.69417526104711 +0.93381073060807 +0.75439764792612 +0.45663934505440 +0.05407957211177 +0.18312074968758 +0.09883943964941 +0.98846923813337 +0.70291464913607 +0.88909192620075 +0.21367536361993 +0.43679440437918 +0.29871227072608 +0.67479945674044 +0.40980925564576 +0.70996175216629 +0.95366018725589 +0.48075945067130 +0.83985108486118 +0.78391528783113 +0.59850713147345 +0.07145924344622 +0.82743318743691 +0.07718654192813 +0.00475494506683 +0.21062738131877 +0.24820841598252 +0.04925861833583 +0.15961829993920 +0.46244800765542 +0.32622426254585 +0.58902624970504 +0.76111683911418 +0.62602055927647 +0.24915654979955 +0.21453147343906 +0.13917292166892 +0.78261868199577 +0.90407578319224 +0.64269810726328 +0.34421569150925 +0.38834540609775 +0.85295927187742 +0.97604630413758 +0.92275339501656 +0.60656874670885 +0.78052304178928 +0.11232254294913 +0.23615491325053 +0.37017074416552 +0.54904650610977 +0.23025353849609 +0.83418059937786 +0.96942830554942 +0.46636752315076 +0.17791276035923 +0.91874920068474 +0.88275662029807 +0.15431314794949 +0.27788715937211 +0.94024072930113 +0.67330725751651 +0.71305095881507 +0.10143158260350 +0.47075359401464 +0.38411039546125 +0.71569386549073 +0.08010477860399 +0.95856060891146 +0.22704756719775 +0.31337251414570 +0.73880289599004 +0.64281842501174 +0.02494690599583 +0.45172745134082 +0.61737429986686 +0.39330579719335 +0.90153911085042 +0.52463465376154 +0.81335401544551 +0.44615395795954 +0.47198312760876 +0.27526717095613 +0.12852570790385 +0.58667025718580 +0.70467450308716 +0.84240069042223 +0.48956113506305 +0.37194763477258 +0.66297414145676 +0.51378403401043 +0.30911982324676 +0.60266344770939 +0.33357813711707 +0.08044358770383 +0.52354552871638 +0.14783240365495 +0.87910231141956 +0.44706123715282 +0.11499352245197 +0.88960222028327 +0.52944266387240 +0.22718574716011 +0.76495937757460 +0.05351501111166 +0.43996714557439 +0.13835074220107 +0.42355586507782 +0.26704607994602 +0.67179288052483 +0.06845778996343 +0.43994161176626 +0.27130393775691 +0.57455745750582 +0.30940025188281 +0.61545544056404 +0.56102198900356 +0.18319454815460 +0.86886330510216 +0.34092270950420 +0.02118216653959 +0.15792182966227 +0.40078241915828 +0.10640342617356 +0.05332129757032 +0.56017947847911 +0.32214601452229 +0.21311799031540 +0.81690205774055 +0.24296072470632 +0.43711577893629 +0.43157526807752 +0.17399287996012 +0.13844320634899 +0.01547680655846 +0.39881774502858 +0.40771913173368 +0.27326264828934 +0.19060341611863 +0.90704563761546 +0.18613584195212 +0.22757469625008 +0.84736639858476 +0.17336967002616 +0.89232890977906 +0.82720750173978 +0.15351595803650 +0.67301807185670 +0.31529863726934 +0.64544221588972 +0.15977581883501 +0.31881798743326 +0.32548143473083 +0.57093210852830 +0.50715277844260 +0.02849441721621 +0.91495976294511 +0.71856031716435 +0.67198776080900 +0.81056231844221 +0.87440573539069 +0.71962515097232 +0.50307642557387 +0.76265845836830 +0.74918889615765 +0.49018047724802 +0.43587403133788 +0.79601624747205 +0.57226606366110 +0.23858735332484 +0.03031094086757 +0.15539026983738 +0.70912999286214 +0.96987113750414 +0.37023441976761 +0.19344196090348 +0.92144700477822 +0.75335399065430 +0.24614770608711 +0.16678737707181 +0.67387963017395 +0.86867710107548 +0.58706933692789 +0.60312554329572 +0.74118742840657 +0.61037453618362 +0.42327348411580 +0.72752437308678 +0.97758070581347 +0.54745935819843 +0.37808773617863 +0.59185225382694 +0.81967621520487 +0.94566229236244 +0.11244417310728 +0.47349383068317 +0.83777050899133 +0.51336444911024 +0.98975442884257 +0.27760064812326 +0.43215096619470 +0.01465744004170 +0.53535622021238 +0.02089496744830 +0.54073044259555 +0.68988816248347 +0.00477464521735 +0.77723224926727 +0.95596283833187 +0.62202522856195 +0.24710812225554 +0.22469906377002 +0.15572557557707 +0.16096609432528 +0.21580851895023 +1428368087 +1665524327 +1270317232 +1824115955 +512254602 +86349257 +726836169 +648218954 +1771285379 +1867253637 +1683712352 +1400185219 +1356940758 +1601759171 +1230636265 +1723299111 +172261367 +222986213 +969005022 +1011396380 +613710413 +1507530575 +461592300 +1799438731 +1263949021 +1737379567 +494813349 +971176659 +1805179369 +221345750 +1213262015 +1245539906 +823537597 +1763950955 +465969841 +1499397093 +212889760 +1932650612 +1665101351 +1718191066 +808552057 +139497366 +1584233128 +1792285903 +808611697 +1696608109 +591966004 +1245736921 +73591053 +288262780 +1883502475 +914479277 +1494647081 +427607079 +348451535 +1093170849 +976601775 +125583541 +1166593425 +1908382582 +1556307350 +1150847972 +1648718153 +92193637 +670730606 +1259013175 +430814400 +1483442407 +805308247 +1214921890 +912203341 +1669106275 +1928506533 +2139676987 +2032324070 +1939910549 +1755561975 +615917460 +1665791258 +551708917 +773804186 +295972610 +768536204 +840207220 +2124308057 +2105110470 +811894388 +1207833177 +721678025 +1090543742 +1727120188 +1107646163 +1186884834 +1825003313 +2134870661 +183116896 +956515367 +45148199 +1236293287 +1934801264 +1890181208 +66493912 +946242452 +623571602 +2114909637 +1026151105 +1175233941 +1808259128 +290876938 +1920460040 +398050799 +558695992 +1370603791 +69915127 +433963956 +1763268462 +1082755345 +1154379662 +1382592565 +1865474156 +1993554219 +2065273719 +1915537838 +2065403559 +813521382 +880532525 +922251345 +1670472148 +2063148946 +467652340 +1838888164 +180543021 +1661153355 +2109542934 +2116375730 +114052042 +1356969801 +300084364 +2063237281 +781410148 +2111805687 +1646975985 +1917610835 +1775597477 +1844495938 +1732012163 +378420045 +632659781 +665549512 +1434901869 +1344404273 +1971277308 +290254454 +1083372102 +895084232 +729814190 +624854114 +899912958 +257245571 +740331159 +307398963 +1146378559 +564320757 +1024779462 +1722493988 +629853638 +1467242619 +1123333445 +674786328 +1945686069 +1038818467 +1377383964 +1508592143 +1591781294 +751309967 +1287962425 +2024796058 +80440979 +1589263475 +218971170 +26882841 +2060952703 +2062276123 +1949546003 +452184916 +693844543 +286574064 +2079184783 +883182482 +1285429140 +1358476124 +1681488844 +423007346 +594894998 +236446631 +1270172052 +392193194 +2057970022 +1389147619 +1613926128 +1344404273 +1971277308 +290254454 +1083372102 +895084232 +729814190 +624854114 +899912958 +257245571 +740331159 +307398963 +1146378559 +564320757 +1024779462 +1722493988 +629853638 +1467242619 +1123333445 +674786328 +1945686069 +1038818467 +1377383964 +1508592143 +1591781294 +751309967 +1287962425 +2024796058 +80440979 +1589263475 +218971170 +26882841 +2060952703 +2062276123 +1949546003 +452184916 +693844543 +286574064 +2079184783 +883182482 +1285429140 +1358476124 +1681488844 +423007346 +594894998 +236446631 +1270172052 +392193194 +2057970022 +1389147619 +1613926128 +1070502497 +185458557 +394571982 +625063792 +1202551232 +1106745477 +1922274594 +1933100968 +1849320089 +2115080830 +1867777732 +2130631723 +596072318 +1653803768 +727441528 +1679567064 +199180016 +1759301942 +1362247603 +843443807 +2078602027 +1855953608 +248916061 +853446759 +55795458 +653874832 +60710992 +1588551358 +1066619885 +2096944326 +1459833265 +2067889981 +1180737744 +14153581 +1877497599 +1864031763 +288585453 +1490975114 +137051711 +1973393940 +1973776514 +238811539 +307692916 +1759733375 +1381965177 +1608191452 +865161446 +1908119138 +1935244809 +1454271467 diff -urN sprng5.orig/check/mlfg/Makefile.in sprng5/check/mlfg/Makefile.in --- sprng5.orig/check/mlfg/Makefile.in 2018-07-21 19:48:27.000000000 +0000 +++ sprng5/check/mlfg/Makefile.in 2021-06-08 16:40:21.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -297,6 +297,7 @@ MKDIR_P = @MKDIR_P@ MPICXX = @MPICXX@ MPIF77 = @MPIF77@ +MPI_CXXLIB = @MPI_CXXLIB@ MPI_DEF = @MPI_DEF@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ diff -urN sprng5.orig/check/mlfg/mlfg.data sprng5/check/mlfg/mlfg.data --- sprng5.orig/check/mlfg/mlfg.data 2014-06-17 15:09:52.000000000 +0000 +++ sprng5/check/mlfg/mlfg.data 2006-05-25 18:57:52.000000000 +0000 @@ -1,1800 +1,1800 @@ -1479592390 -400887705 -1040493538 -1265058804 -769363005 -421277251 -932166349 -450902356 -1029425901 -900326238 -497392476 -1514374107 -467603155 -102597076 -1402703629 -1640901326 -1729708475 -253896737 -890744115 -1413293551 -195470254 -731400149 -635754856 -1135622914 -2116101375 -1207958628 -1048773999 -533224416 -1783933364 -1069377032 -282068853 -1301322252 -1142678914 -1080940249 -634768786 -551735117 -1357583794 -794181935 -444257450 -392936031 -1602380176 -1013726377 -341595908 -1191376433 -944803925 -24239601 -713858690 -2057623794 -1716700195 -899258752 -975464505 -1753253499 -139930507 -597733504 -604506895 -1402326973 -712035993 -171625679 -600788209 -1444427328 -1547795930 -1078400464 -1867472852 -280990064 -811726254 -157778254 -820188763 -709446781 -862183494 -440101858 -315845944 -1558084640 -426249196 -1702958909 -978854151 -998835672 -1461277721 -2041920424 -2006877256 -186801195 -558791815 -2060886137 -1641432522 -2123159983 -791676984 -1833792251 -360219039 -1338017349 -1472217997 -547164146 -653120174 -1223831034 -1249034152 -1938874780 -556939932 -1438070391 -1538041612 -576170163 -590974348 -1697288476 -1156973706 -506745635 -1003874891 -1892991309 -1906993259 -1870329109 -212365321 -258788736 -65103646 -740461238 -1459630964 -1623151653 -1727656421 -991988946 -1542965781 -1144869310 -255130065 -1118860450 -557598993 -1330228411 -1213522106 -231926045 -378897595 -1721744056 -1105231787 -1904166780 -1280622350 -1493397169 -1202643016 -837093238 -71971675 -151049523 -1331408212 -2088759196 -942612908 -1068485569 -2066369055 -1477939633 -94545171 -1636931995 -521099612 -2144156113 -815980232 -964233035 -1843278369 -196187815 -423281740 -2032230745 -624456069 -1589181218 -56503630 -145449295 -554586586 -1673933113 -1287110625 -422533850 -1836587978 -929874167 -420229329 -166379842 -1995162903 -1433884728 -1491313745 -25672326 -1950538526 -1037097897 -61386101 -1550686280 -1501592923 -1142942159 -600290540 -1545023276 -172391556 -1364797429 -1868150767 -1487743920 -1604978597 -780916924 -1091645028 -1387221981 -651779219 -214549038 -1989764002 -1751461710 -1841205666 -688192365 -184572915 -169564183 -636654288 -559430259 -229871618 -1624587181 -932366538 -1336180199 -1973588720 -486955602 -2099200145 -1348355598 -138298841 -2081534641 -906408332 -474269170 -581609504 -2026261507 -1523336333 -1365214220 -1593669467 -633312460 -534204502 -544080195 -1978535384 -998786168 -314105974 -1012159832 -925473505 -1857615718 -149441585 -185145916 -222548712 -214901249 -1791082863 -1156326382 -44156030 -1253848688 -648308961 -1288282789 -153202450 -1772907931 -1503707335 -1308809522 -1469723844 -651728408 -1385217084 -1688153643 -883416071 -1981825721 -935497252 -1377380853 -1983544873 -1286859818 -1585767728 -1531475878 -882078648 -415333362 -1395847242 -1474523846 -1025279620 -1453526478 -1944572365 -575609910 -1664645562 -765564688 -264128408 -369303556 -803746731 -569818854 -925400572 -2004712689 -992000489 -3722056 -116215218 -1740813495 -101125105 -980730455 -120627024 -1214721491 -682185178 -1068469270 -884987585 -1840942807 -1737137317 -1816085293 -903421023 -397377405 -1125288424 -2013661749 -1368861197 -1731290227 -2134454247 -1711480582 -1031810358 -1392566074 -2107207741 -624542422 -1564680160 -1472392593 -1091602407 -987533462 -1430673651 -2011825288 -184877995 -2023363496 -893571685 -247862721 -1016623317 -1682186264 -847908985 -1228631240 -785973376 -1997687835 -756013926 -784070453 -191364269 -552318611 -1333547364 -228787672 -1973343505 -644963710 -605063279 -341291299 -734289559 -1524853832 -427404378 -1681274255 -428472254 -1017778224 -1178654103 -344529740 -1582995971 -330199032 -1876961777 -996288409 -157077643 -1340629876 -1769997978 -71594890 -1218062566 -806603956 -2138222332 -1308932407 -563298890 -798159568 -2014494904 -742739157 -1047753722 -953156701 -50340272 -1178497303 -380073006 -1526319734 -680697446 -380667800 -1315157242 -537460065 -500233660 -2061892812 -1366442105 -1935012331 -1481417693 -1111010588 -1230471380 -1583051758 -1080935888 -397183155 -607363434 -1149118437 -1399647706 -1094739923 -671401034 -1781976193 -1166598850 -1207679567 -1755723017 -2111472309 -693052287 -1848118062 -1905561569 -2020746841 -1077011262 -1130929152 -382320128 -912786744 -122258886 -1578487775 -1960179416 -977022306 -652867489 -418847621 -1236707875 -2030308928 -1722084063 -1585588025 -1662179997 -1005427071 -630649413 -1679305527 -1829360460 -521204301 -1170384730 -1364210546 -1403762658 -438940872 -1454250674 -929251403 -193839673 -805148995 -1936099367 -2030553683 -660153960 -1024915489 -335075343 -1815210300 -4003820 -1072220302 -803990184 -404496852 -259050047 -568574832 -1450139353 -388103239 -844992516 -1562545362 -209552964 -2109297470 -357474685 -308918504 -482165576 -176202981 -849589401 -1909939244 -1398586071 -761301020 -94066398 -914163170 -1162457152 -524373095 -111670500 -1406645666 -1520638422 -179973084 -577704753 -567369867 -492498576 -477707884 -422504232 -1189043798 -2122200284 -413787188 -1299927542 -2001649971 -1623425641 -259617478 -782354286 -1441777067 -1189780966 -832861494 -1922663578 -489493594 -159925960 -549606004 -694951328 -1266591662 -1905655810 -1260404919 -198058865 -1598311509 -1515193841 -1178362594 -804236617 -1539374093 -608223606 -1272398495 -896831742 -1452624622 -1415842864 -18984058 -1269874372 -309254423 -1197187450 -1134726181 -1337381665 -986418074 -481854487 -255315766 -1250286757 -1619514543 -1291095180 -750922653 -1171572482 -597207435 -67722646 -1736087138 -1134330875 -682380070 -1019543188 -1748022154 -274802574 -1658557815 -1218129743 -59760849 -1330060215 -921595624 -1487337391 -1924150298 -1043422798 -448582813 -864709837 -1200776427 -1568167931 -289297737 -0.998205 -0.956935 -0.371610 -0.762515 -0.436362 -0.019143 -0.811395 -0.374120 -0.499913 -0.985215 -0.722624 -0.046144 -0.066780 -0.665696 -0.915794 -0.256873 -0.479638 -0.232819 -0.758608 -0.737500 -0.031275 -0.744219 -0.107267 -0.489566 -0.821224 -0.834118 -0.256182 -0.119493 -0.065291 -0.628854 -0.368258 -0.153621 -0.071111 -0.177034 -0.143429 -0.698935 -0.979219 -0.016459 -0.673069 -0.016057 -0.410859 -0.578348 -0.664259 -0.158482 -0.458950 -0.525902 -0.550917 -0.404576 -0.002026 -0.130242 -0.879852 -0.230896 -0.946384 -0.569865 -0.326170 -0.778187 -0.146863 -0.016558 -0.725336 -0.288450 -0.764894 -0.780762 -0.656779 -0.092216 -0.793757 -0.487608 -0.257837 -0.488781 -0.149146 -0.669914 -0.001489 -0.288133 -0.555481 -0.321171 -0.718555 -0.990359 -0.301558 -0.591527 -0.149264 -0.567102 -0.018052 -0.395003 -0.136582 -0.542215 -0.718118 -0.449781 -0.273951 -0.036165 -0.292450 -0.618658 -0.609486 -0.617456 -0.577555 -0.622264 -0.278303 -0.715745 -0.582708 -0.769150 -0.231852 -0.025023 -0.077338 -0.949034 -0.951913 -0.038506 -0.644418 -0.199632 -0.635619 -0.964239 -0.108352 -0.871435 -0.291971 -0.814780 -0.256090 -0.756134 -0.247932 -0.580847 -0.263067 -0.989678 -0.755556 -0.763647 -0.526426 -0.248962 -0.987128 -0.256166 -0.940098 -0.018436 -0.736089 -0.791358 -0.428726 -0.353863 -0.255370 -0.968766 -0.530266 -0.021746 -0.258345 -0.168888 -0.026535 -0.587460 -0.452756 -0.546052 -0.543885 -0.273066 -0.418372 -0.856860 -0.452977 -0.910723 -0.400482 -0.844323 -0.541465 -0.779143 -0.144615 -0.600527 -0.898527 -0.636296 -0.816247 -0.860969 -0.287909 -0.959946 -0.836343 -0.244884 -0.489609 -0.917976 -0.284893 -0.426013 -0.918815 -0.248499 -0.639643 -0.651506 -0.199583 -0.375159 -0.434056 -0.256600 -0.694628 -0.903979 -0.616020 -0.736798 -0.816417 -0.983880 -0.414459 -0.302109 -0.391162 -0.699490 -0.921250 -0.886555 -0.903781 -0.169144 -0.713668 -0.964771 -0.798418 -0.269518 -0.770560 -0.531808 -0.897859 -0.394531 -0.213066 -0.447570 -0.434114 -0.426460 -0.344461 -0.899396 -0.170898 -0.368983 -0.237487 -0.598636 -0.293963 -0.033741 -0.206195 -0.693094 -0.915103 -0.837101 -0.413478 -0.053292 -0.724295 -0.947814 -0.815320 -0.391652 -0.277518 -0.624189 -0.059760 -0.278338 -0.845664 -0.363976 -0.286371 -0.208014 -0.677825 -0.025906 -0.367672 -0.646392 -0.024433 -0.409118 -0.526730 -0.243991 -0.822371 -0.042231 -0.197614 -0.802833 -0.905236 -0.912751 -0.610020 -0.101178 -0.261922 -0.121618 -0.340466 -0.524426 -0.645806 -0.936055 -0.478676 -0.722984 -0.125466 -0.800347 -0.129849 -0.318480 -0.601121 -0.579589 -0.528000 -0.128708 -0.937106 -0.697985 -0.974214 -0.560673 -0.091105 -0.924714 -0.677396 -0.926323 -0.209025 -0.654194 -0.302125 -0.287869 -0.291216 -0.596978 -0.047842 -0.426179 -0.099754 -0.487801 -0.886903 -0.655554 -0.943149 -0.309006 -0.922605 -0.444814 -0.536254 -0.185291 -0.035567 -0.774329 -0.927604 -0.492154 -0.222006 -0.326314 -0.522378 -0.363619 -0.380854 -0.979890 -0.636134 -0.907489 -0.976134 -0.019335 -0.996905 -0.938144 -0.818545 -0.873900 -0.400084 -0.911575 -0.120851 -0.967703 -0.878178 -0.598871 -0.660644 -0.622245 -0.583428 -0.800388 -0.877120 -0.041231 -0.513953 -0.136413 -0.443901 -0.852292 -0.699613 -0.800019 -0.439723 -0.145976 -0.211117 -0.629279 -0.281111 -0.882540 -0.085172 -0.630192 -0.498508 -0.664420 -0.540131 -0.595225 -0.339431 -0.967704 -0.524486 -0.914958 -0.762400 -0.026111 -0.865797 -0.775479 -0.285351 -0.803662 -0.043712 -0.005671 -0.841956 -0.244604 -0.976018 -0.121712 -0.500567 -0.240331 -0.942249 -0.895756 -0.329581 -0.245447 -0.597272 -0.013739 -0.502473 -0.258401 -0.760045 -0.967144 -0.693425 -0.879629 -0.610318 -0.213941 -0.856039 -0.349233 -0.864209 -0.806626 -0.982050 -0.823519 -0.963242 -0.930634 -0.915217 -0.513663 -0.833168 -0.958342 -0.012606 -0.641603 -0.995151 -0.022324 -0.311416 -0.273694 -0.492060 -0.837339 -0.740805 -0.654606 -0.602852 -0.715779 -0.327409 -0.930570 -0.079322 -0.825642 -0.413422 -0.111239 -0.058745 -0.963758 -0.012090 -0.295045 -0.505649 -0.627871 -0.758681 -0.583320 -0.224103 -0.356166 -0.490404 -0.247047 -0.918394 -0.971251 -0.890531 -0.926336 -0.328512 -0.234239 -0.924757 -0.179540 -0.946404 -0.167256 -0.420269 -0.590096 -0.491608 -0.095472 -0.752942 -0.343705 -0.388588 -0.474846 -0.523703 -0.044774 -0.370362 -0.740116 -0.718227 -0.581804 -0.801553 -0.688312 -0.374708 -0.821075 -0.613002 -0.489801 -0.540510 -0.243769 -0.657570 -0.526333 -0.731429 -0.855915 -0.365528 -0.387596 -0.086928 -0.750037 -0.854258 -0.074033 -0.631819 -0.778000 -0.359305 -0.227073 -0.449621 -0.258706 -0.149064 -0.965846 -0.889814 -0.168339 -0.407718 -0.736552 -0.395252 -0.114041 -0.596430 -0.970437 -0.416088 -0.974542 -0.252051 -0.960625 -0.340323 -0.899128 -0.320889 -0.848664 -0.716187 -0.136291 -0.875715 -0.165736 -0.480501 -0.349938 -0.507887 -0.638744 -0.599216 -0.421602 -0.712778 -0.617678 -0.798719 -0.307057 -0.810032 -0.535590 -0.163422 -0.189424 -0.732748 -0.931416 -0.934642 -0.692611 -0.521670 -0.976660 -0.703737 -0.586448 -0.812751 -0.752173 -0.480310 -0.787476 -0.66707682754441 -0.43670142195167 -0.56645521883267 -0.53408369911455 -0.34482018044668 -0.31652690370551 -0.75517067452860 -0.45300084248869 -0.33778688953221 -0.67209304679213 -0.46671783842377 -0.66259152963123 -0.01699590672049 -0.87925433182299 -0.69188450559362 -0.66779152513367 -0.96378923184650 -0.17962093658776 -0.95238497875678 -0.74627539187575 -0.22346889824725 -0.62852866289457 -0.21910478352556 -0.20867131224550 -0.06155872431448 -0.35657012481090 -0.10739150985387 -0.06638033105414 -0.50449401660477 -0.62881694251570 -0.48127344748763 -0.94856202870789 -0.80005643344980 -0.63433189653540 -0.69916830663025 -0.32911232337234 -0.80587652813523 -0.96300132600866 -0.86252611018656 -0.68978662621525 -0.20096781231689 -0.63876251642133 -0.88422582440667 -0.21011147974345 -0.66895323870871 -0.41403953910235 -0.14074915093113 -0.45997389615835 -0.69700543956045 -0.12492363465322 -0.74607995037758 -0.06221785424712 -0.02084791633721 -0.53944789206015 -0.08967209041199 -0.57014099144787 -0.03779209757307 -0.93166428068532 -0.27088544504549 -0.71896214543780 -0.23171961851796 -0.26206623061649 -0.79773318330927 -0.22284386118363 -0.87258541128883 -0.72610829123422 -0.26618660541790 -0.49921282371595 -0.99657649208531 -0.82726094046318 -0.65472081726931 -0.97181939335282 -0.30934330531417 -0.36042289399654 -0.55036800599586 -0.57964420962000 -0.01246071809742 -0.88627285697303 -0.04801530649934 -0.33909040774559 -0.79500742837331 -0.65839516723810 -0.71469343570742 -0.69806976425468 -0.64916241019781 -0.24457430085246 -0.73536590345774 -0.29003670710231 -0.50049856407797 -0.32641080266478 -0.31684038840911 -0.33651204989570 -0.68846557277559 -0.27644593103857 -0.24516328251982 -0.33353133680944 -0.08509924984171 -0.44881998839320 -0.15586331168693 -0.80664302085516 -0.52296465915073 -0.75709452746990 -0.08563740386389 -0.85917421244818 -0.50463377931945 -0.34675350093347 -0.61906668740917 -0.61378953136048 -0.25652865941527 -0.68411273766380 -0.04332471839323 -0.55331145854461 -0.25396372633300 -0.37206253374193 -0.20823823021041 -0.76418555588778 -0.37269720281050 -0.15712700912768 -0.45914466484685 -0.93864551092154 -0.36271143329343 -0.52340057509897 -0.86026447092796 -0.33656100312910 -0.22858719212171 -0.84279743343383 -0.03548690347994 -0.51768219627226 -0.41004489346959 -0.79748284309100 -0.87899907794547 -0.20272961663145 -0.69380929576283 -0.26559889710446 -0.20003608565342 -0.43472179980206 -0.65311675488312 -0.64790294493621 -0.26372814842328 -0.20671151195699 -0.27358482219935 -0.00751042736980 -0.86458955854952 -0.23405137499808 -0.17799032812763 -0.62707335613358 -0.33019348421209 -0.66418943249386 -0.82815404270131 -0.12806832970229 -0.71360930136537 -0.15703923185854 -0.15996150517220 -0.47185004838974 -0.70182011572814 -0.85097583929742 -0.33574257238013 -0.21945548302139 -0.88996728125244 -0.26176499077587 -0.91333136045279 -0.19108794111203 -0.12458590264380 -0.86884485394596 -0.65729438626171 -0.98558709742766 -0.68398308590939 -0.54396600516259 -0.70696355694135 -0.59860690163410 -0.21028939182566 -0.91613768530596 -0.07918899699830 -0.40328719274037 -0.44011797073979 -0.79539809912375 -0.50800250615169 -0.66455091031377 -0.38807567615874 -0.79698925801870 -0.70847705649232 -0.54915242164691 -0.97790425797076 -0.52200508502212 -0.91093084725844 -0.35450121557906 -0.80850137471968 -0.98595183243986 -0.76187570739637 -0.67233248572340 -0.41091429212289 -0.11883047616137 -0.46900907616483 -0.79948524093832 -0.86200107493134 -0.73045082998953 -0.84381668761388 -0.94146692242353 -0.58308558664078 -0.53950825531963 -0.29898133021268 -0.39003970204974 -0.28551322621566 -0.03866210028434 -0.11702211097987 -0.55895752134364 -0.62258630670855 -0.18222361361407 -0.94061355914180 -0.64864456580546 -0.94168077351806 -0.02983071947857 -0.70759677866605 -0.28658716078875 -0.23594758146864 -0.11241765375836 -0.80235161928622 -0.45318390403250 -0.56976557293665 -0.38236562699159 -0.99999612451006 -0.99229086263792 -0.36764628425793 -0.28161359878830 -0.61878736839957 -0.47354480288347 -0.54075522850625 -0.19696681299825 -0.98617879409507 -0.30388298313849 -0.70995497025748 -0.92307242751514 -0.73639445865720 -0.72587815123612 -0.68788070568693 -0.74206799395073 -0.43511798069132 -0.17089268850060 -0.37532997052567 -0.73472314188609 -0.85618981743408 -0.23725809963981 -0.49120960280093 -0.14706546307850 -0.60182153682623 -0.87671069117582 -0.04473499349400 -0.16244547842406 -0.04211678988415 -0.29807710256149 -0.00107930545142 -0.06766165569313 -0.31435686905174 -0.25520803701138 -0.48983868387348 -0.94187844534931 -0.88001363529777 -0.94669837062158 -0.15533739418443 -0.45323790727144 -0.51290092956307 -0.44847433562220 -0.02140264210172 -0.15630767719577 -0.86044311769900 -0.17559796316735 -0.13175102039317 -0.48018204748956 -0.98771102872480 -0.41899646466337 -0.57129380867374 -0.17893041811889 -0.18967996864111 -0.55218721553259 -0.62023488789449 -0.80916925737564 -0.59360518373791 -0.40028727450593 -0.91710445560819 -0.56976888377593 -0.81159836319503 -0.80575619477458 -0.61289833861667 -0.87709624219579 -0.08754286588931 -0.10018329432392 -0.07843914335774 -0.45078336453720 -0.61466298905540 -0.62008152831281 -0.34091300815601 -0.74957804633591 -0.21823872539742 -0.84865892498356 -0.83468696928555 -0.35757486341397 -0.18909585745148 -0.36047190805376 -0.74793949015339 -0.12496447636262 -0.41631253597594 -0.06168852543626 -0.88406715968314 -0.55789805815970 -0.22764052778309 -0.38093143189470 -0.28659670625261 -0.66169034780781 -0.33349910681214 -0.00247879690264 -0.53206685754328 -0.34277232617815 -0.24077247445346 -0.52130518971696 -0.31690103698101 -0.68863562121243 -0.33635459653690 -0.60922781553320 -0.02506872539119 -0.67598365357095 -0.73419497186379 -0.65581392810606 -0.14944149848016 -0.67575067449460 -0.65013851618376 -0.54641106252886 -0.01427137716044 -0.58686597084429 -0.96032822886257 -0.20659414041577 -0.47921214549125 -0.31681990690629 -0.99270716889619 -0.18190546835945 -0.97214191365411 -0.79079892610870 -0.25886359515349 -0.97875019529459 -0.97380590453067 -0.60718457208527 -0.68678375683778 -0.48752908855866 -0.64656203747366 -0.63049151283347 -0.49970772726916 -0.14327813303035 -0.70277839747038 -0.62225670317306 -0.37167593529117 -0.15109001230160 -0.24895833975093 -0.78426004231119 -0.88457792646492 -0.31854655548182 -0.64149304819267 -0.89335117432318 -0.35502496856858 -0.42733568902244 -0.57007062542825 -0.00919063946116 -0.62300154585319 -0.92993939055221 -0.66761175620262 -0.12917363886286 -0.32132563679970 -0.80824923825512 -0.38507927949566 -0.28331030568599 -0.64183508323654 -0.67940977859476 -0.82681695568424 -0.09657383982305 -0.82549603486606 -0.19383729312704 -0.69939007754886 -0.08589514275225 -0.76011288739000 -0.88981808138101 -0.69632472573335 -0.66515145015357 -0.84131150807540 -0.84018346458432 -0.51208289678165 -0.51817154799097 -0.16129287078102 -0.69658915768344 -0.32254091541901 -0.37266833210475 -0.33543049388915 -0.77040581375174 -0.41271456789353 -0.31160727812996 -0.63754667178633 -0.07151208435725 -0.10112789111170 -0.86451906615495 -0.45196091319656 -0.71825244082051 -0.79782212575289 -0.37005277402506 -0.93542927679681 -0.46249993457317 -0.85041608175733 -0.06292647733768 -0.48141675075374 -0.47902887932002 -0.54490612011356 -0.65776573766857 -0.22774864633350 -0.85616914421321 -0.41711320109365 -0.93659511836988 -0.30460424330078 -0.54420600288926 -0.51426979015314 -0.15170535911616 -0.49157885805067 -0.21727610156878 -0.97429552359056 -0.19854613668419 -0.77645154950717 -0.67786805694953 -0.27543842443902 -0.64580014572443 -0.92987039072280 -0.25864632579496 -0.26239829609823 -0.19211175322058 -0.20440734967767 -0.33186309644813 -0.38323947146284 -0.53571353463313 -0.06307918673434 -0.73630475380790 -0.22580971060458 -0.28535796223783 -0.86383611993736 -0.35268557797844 -0.19085509841494 -0.95186797529562 -0.50734774893903 -0.56899074902343 -0.69552115106600 -0.62135428215553 -0.36798100307879 -0.84816696791066 -0.86739608487791 -0.29921317753968 -0.91003685030742 -0.64739902367189 -0.24898048938103 -0.70818794159043 -0.90127604886670 -0.07705827536448 -0.78237334964088 -0.38208865726836 -0.38291106908472 -0.85150872553993 -0.31116424700736 -0.78073607774376 -0.02932542494809 -0.70614387018278 -0.91499002390368 -0.76863861591799 -0.22676892963869 -0.94064617177479 -0.38088542783609 -0.23171424421995 -0.99677410272065 -0.29238734907861 -0.70733802864552 -0.92483039135327 -0.09846023302220 -0.57004173367141 -0.91313418530187 -0.41429363297269 -0.25109866810243 -0.05294554629500 -0.70360457405017 -0.48940125648699 -0.32180464161190 -0.27046121241532 -0.88306425959198 -0.16648620752691 -0.54959042799151 -0.73925723913255 -0.75850946322481 -0.48171865432187 -0.32506611349735 -0.11952899412352 -0.45063237089665 -0.40274581162701 -0.71819344658394 -0.06722332286302 -0.48939555003478 -0.18053002458094 -0.64306721337170 -0.64203832975217 -0.12266818285040 -0.69096442645785 -1961593022 -2058123164 -304465401 -1596182158 -1317827193 -37312776 -1710348730 -321176464 -548892099 -374073910 -686123613 -824980045 -374560385 -898230183 -587356093 -653208534 -1717614279 -1798552902 -607067031 -311577143 -802144035 -1768240837 -667268521 -1300935595 -1320489242 -588779042 -424844546 -597998467 -2084640032 -1419226786 -1311969003 -2061391578 -1968303047 -649108449 -140663167 -1845945341 -1587583795 -1948400831 -904785550 -1460005325 -1185029470 -1621046861 -922274779 -895088647 -1318188395 -779630936 -1042195180 -1115622271 -357993515 -95351369 -1888523691 -502957515 -1121894322 -444358002 -1194554281 -565815714 -1259131080 -1835213294 -1178703369 -1367738957 -1721015722 -1638510758 -1398181812 -131111728 -754040484 -419105024 -1813243660 -1096106616 -1898515309 -1717316185 -1169927969 -1682797758 -1421531912 -32184556 -1576227289 -1965971987 -1435271145 -1959385169 -1595278458 -186639063 -1157825026 -121380000 -1844286330 -1401720290 -1734430958 -13982192 -217504713 -1327826769 -548718350 -1088227171 -320699184 -1826457792 -1355139154 -1858435884 -365057286 -1744972202 -580124221 -2112853481 -567666065 -1282428089 -1228708940 -424114392 -516600756 -1072297779 -161166897 -2055535810 -1483643640 -853505264 -1486864929 -7464951 -238673170 -18957402 -1351215569 -2065167307 -1885264559 -2038152168 -104196380 -1835450499 -893419649 -186618461 -842957567 -1689076273 -672071078 -1019322292 -626176346 -77538727 -1562591571 -1116250060 -552917176 -84479510 -348878344 -696362 -1557130422 -520575737 -1788839721 -1862713708 -917020369 -240806822 -1678044546 -448885613 -1103964674 -440632845 -1140255025 -2010811440 -2037053227 -1602150360 -1941326522 -1657240736 -284845518 -2067794723 -1479592390 -400887705 -1040493538 -1265058804 -769363005 -421277251 -932166349 -450902356 -1029425901 -900326238 -497392476 -1514374107 -467603155 -102597076 -1402703629 -1640901326 -1729708475 -253896737 -890744115 -1413293551 -195470254 -731400149 -635754856 -1135622914 -2116101375 -1207958628 -1048773999 -533224416 -1783933364 -1069377032 -282068853 -1301322252 -1142678914 -1080940249 -634768786 -551735117 -1357583794 -794181935 -444257450 -392936031 -1602380176 -1013726377 -341595908 -1191376433 -944803925 -24239601 -713858690 -2057623794 -1716700195 -899258752 -1479592390 -400887705 -1040493538 -1265058804 -769363005 -421277251 -932166349 -450902356 -1029425901 -900326238 -497392476 -1514374107 -467603155 -102597076 -1402703629 -1640901326 -1729708475 -253896737 -890744115 -1413293551 -195470254 -731400149 -635754856 -1135622914 -2116101375 -1207958628 -1048773999 -533224416 -1783933364 -1069377032 -282068853 -1301322252 -1142678914 -1080940249 -634768786 -551735117 -1357583794 -794181935 -444257450 -392936031 -1602380176 -1013726377 -341595908 -1191376433 -944803925 -24239601 -713858690 -2057623794 -1716700195 -899258752 -605086814 -1131528105 -1850285002 -157538708 -1693930696 -1861460523 -535597249 -1680931216 -60050938 -875439901 -847147123 -2034268809 -2071723302 -1480294277 -1543000361 -576588008 -328508648 -353998495 -1257696987 -1500891757 -833190009 -2038618810 -473850805 -2145409406 -265876274 -2023369184 -24742435 -1871473403 -1501135921 -2007608235 -2096968904 -1979289910 -669266309 -987358740 -362895445 -1444187483 -646632638 -1747229087 -463184332 -1350777785 -373136403 -1317013730 -1799881304 -716658397 -593429446 -784240049 -1469019488 -1994252882 -269783886 -1028253893 +1344404273 +1971277308 +290254454 +1083372102 +895084232 +729814190 +624854114 +899912958 +257245571 +740331159 +307398963 +1146378559 +564320757 +1024779462 +1722493988 +629853638 +1467242619 +1123333445 +674786328 +1945686069 +1038818467 +1377383964 +1508592143 +1591781294 +751309967 +1287962425 +2024796058 +80440979 +1589263475 +218971170 +26882841 +2060952703 +2062276123 +1949546003 +452184916 +693844543 +286574064 +2079184783 +883182482 +1285429140 +1358476124 +1681488844 +423007346 +594894998 +236446631 +1270172052 +392193194 +2057970022 +1389147619 +1613926128 +1415911066 +863754398 +176193777 +116183920 +553831988 +2129269519 +920281116 +816643758 +211608358 +667893922 +1013642387 +925903694 +1354637784 +1195408961 +405550226 +1160723497 +694730397 +453821204 +949196364 +945410040 +1662945891 +1382219580 +2043159770 +996618570 +178120018 +653579137 +820727623 +661270676 +2141607972 +957828023 +15599396 +934123276 +405498384 +1463894368 +1596350686 +1383971408 +401806818 +1899097687 +1435392747 +280044166 +451535797 +667891553 +328081257 +1404838802 +1372423908 +679494027 +1862006328 +2056473173 +269394493 +336138917 +909032177 +581660988 +314791878 +1175454363 +1663824789 +1975897213 +782860028 +947600045 +2056631522 +554900845 +958491825 +467464269 +1084419666 +324193819 +328410499 +925474559 +1110871928 +1813339558 +1629371405 +283333840 +1729397961 +699054089 +1676777235 +80120204 +563439214 +1123433668 +1571384470 +795397952 +1163568631 +1173697950 +875025470 +1270724394 +2074362053 +1991114956 +1924898827 +395467548 +1317995558 +835453867 +45848263 +490734899 +1254527314 +1166014910 +925010564 +1754993348 +1030617174 +515621579 +239727235 +312935503 +247970997 +2041231128 +807800855 +953023582 +935038439 +981096876 +433096946 +2121283663 +581202621 +1744378620 +828052051 +74082531 +757117088 +1470977045 +1226866639 +919321941 +2004121677 +883266750 +1785905196 +1773006200 +1364307522 +1538266683 +18772703 +789553563 +30980478 +1663359184 +2146435145 +662331959 +1757759233 +1033484021 +455632505 +290497330 +274470917 +422036712 +1189625250 +287261904 +108395007 +1351218821 +66569817 +1195242004 +1556977983 +179426526 +1267893111 +1760372829 +1817116431 +1075643649 +886526580 +919660953 +1321658356 +1722851223 +1609870321 +1978721730 +387611524 +571857310 +512754693 +594766505 +1586894221 +378514589 +705833231 +93189042 +574533467 +796035982 +618717082 +709622129 +1016621500 +769517324 +380070887 +884625363 +836560510 +717589286 +1760589264 +1752652145 +2012213828 +511359954 +1668989206 +1511804370 +625680404 +1239422926 +1462724929 +1363508673 +306812441 +3732111 +1531256075 +1081221917 +1743679436 +393721496 +34533623 +708088293 +1318475436 +102690723 +1171438382 +1467368976 +1391083255 +1102642459 +1336047243 +1621780307 +1371606554 +574540705 +1124015787 +927493373 +308200721 +1423045818 +672893583 +580263407 +457222401 +1029658533 +1776369839 +1835365956 +1170624327 +284752306 +2017154155 +610578098 +1141504663 +1262509647 +203926253 +1116964753 +208874102 +1179208379 +1603588990 +277718350 +1943719683 +1024149981 +1798173807 +1642621551 +1011879675 +2103040509 +1085044987 +716654720 +1508350038 +494027439 +480853088 +1944413426 +1147135970 +1157923848 +606027416 +99936483 +855056188 +1003971078 +1984960014 +772703801 +848514041 +1229059881 +1528038590 +638511859 +557013705 +1832400779 +1475322199 +1086818332 +743119971 +382299528 +968193075 +159961919 +1542723225 +25698362 +1988262367 +2018002873 +1936123554 +195327859 +657935247 +243670217 +1638126310 +1745855456 +1714186832 +2044971910 +1825844872 +681215965 +744580311 +1431909696 +617135926 +45883337 +404305660 +1418128758 +1696570016 +956993983 +1708546581 +15474574 +889607394 +1443832571 +906917449 +2006716320 +1406930240 +629365879 +1414409921 +733909111 +1657513754 +966853919 +103339508 +514184032 +1969441535 +1997515329 +585668431 +625417594 +1862889323 +1870417561 +30924413 +1121835174 +1000765102 +355482564 +134853724 +1233312675 +610694819 +92486554 +916554444 +1828453247 +201525650 +1131865759 +354840432 +2145379507 +250659414 +801197096 +2018786822 +78703238 +378982443 +1801681229 +1727827390 +1039879051 +615759336 +1759083332 +1202452667 +1908062337 +1197994628 +1828948812 +95424944 +1640450411 +828149985 +697423169 +1508613549 +1382079153 +1784539927 +1475773024 +1029085082 +1791303007 +1162136830 +583260098 +61759169 +1784938377 +305061817 +1653715166 +352382817 +857098300 +1625462612 +1481157488 +2042510187 +1524384019 +1504355392 +2065236858 +1840819437 +654648808 +153274497 +1150747834 +1153036354 +450218012 +1681901621 +1858459529 +1294988750 +1044913750 +1126516198 +778637056 +395295075 +1569926001 +1656974970 +1771840527 +1093679503 +299630624 +1724524913 +59638046 +663677881 +2025638847 +1613241068 +558081481 +669446626 +1469995534 +12318760 +1703817809 +1726527454 +1574550754 +2096330888 +88695219 +1136618393 +159529883 +459463337 +1878572988 +1746359419 +1922251707 +836786879 +234170641 +1388749363 +67486428 +606008713 +379090882 +1014454838 +1870606359 +493659301 +255397772 +1779960663 +1648318975 +1056415637 +1053562861 +946641171 +1638701732 +1484378635 +166919624 +73933550 +127478512 +67049277 +2141739038 +1383757011 +1277505226 +217627134 +1729686702 +215836453 +507829502 +1297262388 +1065023423 +1166162663 +2118370625 +1600373301 +582356622 +518727986 +1057479645 +1139371156 +760451006 +1298553848 +493656176 +755063548 +1221540431 +2066178339 +2107003517 +973995769 +1008442424 +664996150 +1643034021 +1997144721 +888214295 +1455347431 +1747211104 +953974185 +1854727271 +51950094 +1969226547 +385350350 +1353384322 +1556125725 +1351329627 +575727567 +1810222152 +616117321 +1817150626 +2099005577 +1513033110 +1194491985 +34369753 +0.556365 +0.464570 +0.988374 +0.578140 +0.951955 +0.577156 +0.849277 +0.242430 +0.334194 +0.057300 +0.446225 +0.873265 +0.942439 +0.953111 +0.411449 +0.113237 +0.187278 +0.294615 +0.818375 +0.780273 +0.951770 +0.013072 +0.323974 +0.512235 +0.362725 +0.363430 +0.275777 +0.123226 +0.652680 +0.994410 +0.086023 +0.777441 +0.479927 +0.669029 +0.682351 +0.394146 +0.886341 +0.029105 +0.737987 +0.879878 +0.280079 +0.913448 +0.227181 +0.894477 +0.486361 +0.420041 +0.065549 +0.557863 +0.062585 +0.260766 +0.809889 +0.726972 +0.726049 +0.190116 +0.906481 +0.514734 +0.036951 +0.933179 +0.751360 +0.438607 +0.578829 +0.582993 +0.547446 +0.953132 +0.197733 +0.810112 +0.685195 +0.663330 +0.581476 +0.852351 +0.750613 +0.850654 +0.766051 +0.092521 +0.443414 +0.175103 +0.702127 +0.296415 +0.129511 +0.401560 +0.335992 +0.658406 +0.028530 +0.382178 +0.243521 +0.269750 +0.220765 +0.144021 +0.503041 +0.461049 +0.589106 +0.528974 +0.543907 +0.401842 +0.848025 +0.546879 +0.153792 +0.871680 +0.783100 +0.319127 +0.881548 +0.054978 +0.240050 +0.668867 +0.773522 +0.615138 +0.460975 +0.112203 +0.255110 +0.843256 +0.495164 +0.820179 +0.658619 +0.311778 +0.569426 +0.998841 +0.659705 +0.987240 +0.670992 +0.938948 +0.145920 +0.240706 +0.321197 +0.603820 +0.845679 +0.352306 +0.189999 +0.881878 +0.406841 +0.915780 +0.600408 +0.977865 +0.949506 +0.677976 +0.999998 +0.275047 +0.287840 +0.949228 +0.070744 +0.802020 +0.391978 +0.907116 +0.677658 +0.574524 +0.706702 +0.752933 +0.260338 +0.999984 +0.553907 +0.308594 +0.292198 +0.149311 +0.962380 +0.463041 +0.405696 +0.337848 +0.414911 +0.022559 +0.176959 +0.469133 +0.110039 +0.154065 +0.699369 +0.870109 +0.314921 +0.541116 +0.718871 +0.287507 +0.980954 +0.559291 +0.105017 +0.871972 +0.709174 +0.371855 +0.609523 +0.497115 +0.474982 +0.186873 +0.390046 +0.673785 +0.251868 +0.320715 +0.410845 +0.830038 +0.579706 +0.165204 +0.861112 +0.298581 +0.975676 +0.549081 +0.025104 +0.950148 +0.981877 +0.074374 +0.771066 +0.835633 +0.224579 +0.528940 +0.795009 +0.390040 +0.455583 +0.944649 +0.676607 +0.924170 +0.722930 +0.003352 +0.917310 +0.199162 +0.506158 +0.131757 +0.605962 +0.774411 +0.394792 +0.738743 +0.535345 +0.700964 +0.881903 +0.201232 +0.942461 +0.399838 +0.186060 +0.230631 +0.853556 +0.427495 +0.055923 +0.985979 +0.761894 +0.672840 +0.624820 +0.570923 +0.864983 +0.487831 +0.471306 +0.983926 +0.965564 +0.608061 +0.423419 +0.744052 +0.829526 +0.085885 +0.716205 +0.617752 +0.076796 +0.093574 +0.476120 +0.672465 +0.395681 +0.329645 +0.935817 +0.080442 +0.961491 +0.840832 +0.246548 +0.697949 +0.720137 +0.246161 +0.101111 +0.010964 +0.757919 +0.140282 +0.349373 +0.369731 +0.144995 +0.948966 +0.180601 +0.147219 +0.242224 +0.615737 +0.126176 +0.622113 +0.698421 +0.869097 +0.256896 +0.503387 +0.364886 +0.185977 +0.081276 +0.700407 +0.828774 +0.725358 +0.888289 +0.175982 +0.763644 +0.147136 +0.063501 +0.315750 +0.420633 +0.823039 +0.210119 +0.003502 +0.162781 +0.247427 +0.340346 +0.857208 +0.730889 +0.254988 +0.546633 +0.390497 +0.791511 +0.485924 +0.283397 +0.607676 +0.497457 +0.485160 +0.346415 +0.571326 +0.988003 +0.896707 +0.909368 +0.032770 +0.898584 +0.240087 +0.855993 +0.808528 +0.548880 +0.904694 +0.609347 +0.941593 +0.585342 +0.468322 +0.028794 +0.890791 +0.620120 +0.285701 +0.985859 +0.533735 +0.291378 +0.329344 +0.019415 +0.110826 +0.656740 +0.445437 +0.555885 +0.286938 +0.230966 +0.096156 +0.979198 +0.641853 +0.311523 +0.637631 +0.244436 +0.140502 +0.248634 +0.413755 +0.275295 +0.715571 +0.306643 +0.928175 +0.879426 +0.476133 +0.064039 +0.265420 +0.623167 +0.790017 +0.486200 +0.255699 +0.367829 +0.072442 +0.752906 +0.146597 +0.211205 +0.382453 +0.106569 +0.766809 +0.994993 +0.488874 +0.673493 +0.093841 +0.081955 +0.484671 +0.939592 +0.234405 +0.839118 +0.371347 +0.936747 +0.878662 +0.762438 +0.497614 +0.241631 +0.346110 +0.667393 +0.238548 +0.964985 +0.548044 +0.706433 +0.156751 +0.450895 +0.747294 +0.505023 +0.147009 +0.763300 +0.526743 +0.966622 +0.775326 +0.075134 +0.850813 +0.546348 +0.716117 +0.606450 +0.764861 +0.565164 +0.232192 +0.887247 +0.738029 +0.753110 +0.013010 +0.222637 +0.300216 +0.481673 +0.023479 +0.280923 +0.381830 +0.508857 +0.722632 +0.008241 +0.216166 +0.949090 +0.440561 +0.690099 +0.876038 +0.699696 +0.368696 +0.960746 +0.771743 +0.966088 +0.843554 +0.915028 +0.168329 +0.933063 +0.948936 +0.685973 +0.721296 +0.768305 +0.286345 +0.346782 +0.783534 +0.679570 +0.975080 +0.999663 +0.455780 +0.081140 +0.835590 +0.588488 +0.927249 +0.470078 +0.490836 +0.897980 +0.281317 +0.012735 +0.092694 +0.594129 +0.425354 +0.373070 +0.292350 +0.961893 +0.676502 +0.948787 +0.588270 +0.339951 +0.271071 +0.257900 +0.895763 +0.839618 +0.695309 +0.971764 +0.385455 +0.049776 +0.092051 +0.265841 +0.632942 +0.580560 +0.651059 +0.897529 +0.642173 +0.360060 +0.277537 +0.414824 +0.698736 +0.645108 +0.023722 +0.163647 +0.805548 +0.507287 +0.388646 +0.829317 +0.459725 +0.335222 +0.808159 +0.038340 +0.849234 +0.530963 +0.011742 +0.727507 +0.422920 +0.214055 +0.718802 +0.087040 +0.254013 +0.880395 +0.127240 +0.85946695012587 +0.80056548692219 +0.39640787665780 +0.30348170192968 +0.97470308936659 +0.15183935089797 +0.80678229168707 +0.41596220466227 +0.46882840344583 +0.86467446685724 +0.88383852316380 +0.13910334436739 +0.51046210289985 +0.87410538081039 +0.43094011194741 +0.63968490852616 +0.33074547539987 +0.68302758839059 +0.28935077937821 +0.63981321390559 +0.96026837233886 +0.23811802199661 +0.11015051038739 +0.10228639123466 +0.42445707407712 +0.91892284528194 +0.34949370893663 +0.44087992840965 +0.07803874208123 +0.88262629989268 +0.60435421591064 +0.09281185965636 +0.71896288616325 +0.92521185176017 +0.07977189520257 +0.35379194231503 +0.30686128098497 +0.13939489354464 +0.91354304826045 +0.00239357327978 +0.89315284029164 +0.20755006448190 +0.80886747166137 +0.01223880374289 +0.27529479061168 +0.94885097548783 +0.88115642112811 +0.93601717172543 +0.97920099319651 +0.40692646552672 +0.28335740759159 +0.15193030046281 +0.52964895791582 +0.99236862384579 +0.39072970134332 +0.80892471991117 +0.66648069833687 +0.91860444149815 +0.93444964756581 +0.07700984911627 +0.19336476684994 +0.17254322252082 +0.33287036817726 +0.97530524855316 +0.02218692404079 +0.23647534577431 +0.82912597594910 +0.73396996587774 +0.95067069730043 +0.59470032664439 +0.18775462415836 +0.98948597084984 +0.98837499763500 +0.90422865807413 +0.63285132384081 +0.52649098010234 +0.77084279037276 +0.34835483881441 +0.74425879181949 +0.31627147315073 +0.39750202262375 +0.33600293010495 +0.27267557469964 +0.45294888366820 +0.37136739215805 +0.38240828232189 +0.72709027138574 +0.82911364323873 +0.81013993419170 +0.31047173417153 +0.11150243546357 +0.01872270340904 +0.65122285389416 +0.96533210099204 +0.07707090000422 +0.16315897867070 +0.18968465844986 +0.04513422410788 +0.54245412541945 +0.99834484551506 +0.19695437442412 +0.97634304967117 +0.49752501217347 +0.46339180836231 +0.92345651920539 +0.36119290353744 +0.62031737954453 +0.39639455474976 +0.51532146673407 +0.67559715285917 +0.06697862119140 +0.32714987412626 +0.00859764979173 +0.46307743364810 +0.45561644242125 +0.92600053170868 +0.87481932968075 +0.39712263331300 +0.66137359332269 +0.27162687728351 +0.93750666321480 +0.66078939867512 +0.80970984784050 +0.24849411903893 +0.46339573449724 +0.72413333835416 +0.89448935763164 +0.62521852945918 +0.28313638059790 +0.12269538994015 +0.80739956549571 +0.66250024791868 +0.09593994446749 +0.77215721048367 +0.77220170160662 +0.28316501029737 +0.90161074733187 +0.70147580958018 +0.30908784046016 +0.51723922330905 +0.28775894734101 +0.97178344688766 +0.62575423884819 +0.51542045411449 +0.74676570938357 +0.23819615512637 +0.70002304649226 +0.15057761347154 +0.60006375258574 +0.63112755508236 +0.55170698141761 +0.35850302853081 +0.37264263691868 +0.21435461387003 +0.02493232321893 +0.55130545599559 +0.43074249503634 +0.83507103750842 +0.73099197195015 +0.79720389216208 +0.03468113499158 +0.94950186840938 +0.63193396197243 +0.08450410350550 +0.18749560326950 +0.11407333649404 +0.70942111560032 +0.41480670603759 +0.08237400640921 +0.54266862789824 +0.18836253198059 +0.45539663771361 +0.36134790270536 +0.10665120831904 +0.61781824432736 +0.29373945174788 +0.61880511508321 +0.80597079738558 +0.04193730103877 +0.45777591709970 +0.78525237493057 +0.90739536187589 +0.22809322953320 +0.83230042596123 +0.85618984265886 +0.68122838123657 +0.83103891413751 +0.90767180519304 +0.14890630237246 +0.88719391199446 +0.98611578951938 +0.46214011945379 +0.75160953343117 +0.13398905613895 +0.16346613525851 +0.43303339109780 +0.34892176138497 +0.50702282492501 +0.97631422050038 +0.93911765305029 +0.42636173516627 +0.65485309931944 +0.22952002002581 +0.71331893721531 +0.78268716214510 +0.86641236755804 +0.56481786578417 +0.28671003623434 +0.95615602185464 +0.75723798426711 +0.25874970573985 +0.55237167659562 +0.96591099186892 +0.35145791890784 +0.52075056348867 +0.81978471983402 +0.94264769768073 +0.22671495147598 +0.71736867806491 +0.49601322222352 +0.26486393147445 +0.51351841999509 +0.01454799240635 +0.04353412037532 +0.02860247127062 +0.02841255233654 +0.49618141751992 +0.14770945990786 +0.85147523337192 +0.14751009683938 +0.16193010351461 +0.59463235725218 +0.17244194835469 +0.85241662900740 +0.39121635935361 +0.43060632824598 +0.15210475353851 +0.32025952301746 +0.11885676522209 +0.90883511166407 +0.41349462471682 +0.02710297992735 +0.50462328235337 +0.97311077202069 +0.14548304106656 +0.09000237643191 +0.32637376266085 +0.73140002168361 +0.25421256360450 +0.66124968707229 +0.84082228972246 +0.58059365452682 +0.17838947416790 +0.09666475154608 +0.11424099049151 +0.99754656359987 +0.07215969777675 +0.04678411506190 +0.41273479283618 +0.56392632739435 +0.94351912744514 +0.35461403274363 +0.68804698080462 +0.68693652178112 +0.11815054430796 +0.80969919454586 +0.04977707560794 +0.45585533049243 +0.76244201016829 +0.26588020696119 +0.28692575805366 +0.07156898425345 +0.50877163076699 +0.78787604366826 +0.06086863628077 +0.83916967653645 +0.58712064686126 +0.26287989406865 +0.08490745519403 +0.01403989849807 +0.00632466724933 +0.81911777066838 +0.44176692587976 +0.19611076015327 +0.04855708030016 +0.69417526104711 +0.93381073060807 +0.75439764792612 +0.45663934505440 +0.05407957211177 +0.18312074968758 +0.09883943964941 +0.98846923813337 +0.70291464913607 +0.88909192620075 +0.21367536361993 +0.43679440437918 +0.29871227072608 +0.67479945674044 +0.40980925564576 +0.70996175216629 +0.95366018725589 +0.48075945067130 +0.83985108486118 +0.78391528783113 +0.59850713147345 +0.07145924344622 +0.82743318743691 +0.07718654192813 +0.00475494506683 +0.21062738131877 +0.24820841598252 +0.04925861833583 +0.15961829993920 +0.46244800765542 +0.32622426254585 +0.58902624970504 +0.76111683911418 +0.62602055927647 +0.24915654979955 +0.21453147343906 +0.13917292166892 +0.78261868199577 +0.90407578319224 +0.64269810726328 +0.34421569150925 +0.38834540609775 +0.85295927187742 +0.97604630413758 +0.92275339501656 +0.60656874670885 +0.78052304178928 +0.11232254294913 +0.23615491325053 +0.37017074416552 +0.54904650610977 +0.23025353849609 +0.83418059937786 +0.96942830554942 +0.46636752315076 +0.17791276035923 +0.91874920068474 +0.88275662029807 +0.15431314794949 +0.27788715937211 +0.94024072930113 +0.67330725751651 +0.71305095881507 +0.10143158260350 +0.47075359401464 +0.38411039546125 +0.71569386549073 +0.08010477860399 +0.95856060891146 +0.22704756719775 +0.31337251414570 +0.73880289599004 +0.64281842501174 +0.02494690599583 +0.45172745134082 +0.61737429986686 +0.39330579719335 +0.90153911085042 +0.52463465376154 +0.81335401544551 +0.44615395795954 +0.47198312760876 +0.27526717095613 +0.12852570790385 +0.58667025718580 +0.70467450308716 +0.84240069042223 +0.48956113506305 +0.37194763477258 +0.66297414145676 +0.51378403401043 +0.30911982324676 +0.60266344770939 +0.33357813711707 +0.08044358770383 +0.52354552871638 +0.14783240365495 +0.87910231141956 +0.44706123715282 +0.11499352245197 +0.88960222028327 +0.52944266387240 +0.22718574716011 +0.76495937757460 +0.05351501111166 +0.43996714557439 +0.13835074220107 +0.42355586507782 +0.26704607994602 +0.67179288052483 +0.06845778996343 +0.43994161176626 +0.27130393775691 +0.57455745750582 +0.30940025188281 +0.61545544056404 +0.56102198900356 +0.18319454815460 +0.86886330510216 +0.34092270950420 +0.02118216653959 +0.15792182966227 +0.40078241915828 +0.10640342617356 +0.05332129757032 +0.56017947847911 +0.32214601452229 +0.21311799031540 +0.81690205774055 +0.24296072470632 +0.43711577893629 +0.43157526807752 +0.17399287996012 +0.13844320634899 +0.01547680655846 +0.39881774502858 +0.40771913173368 +0.27326264828934 +0.19060341611863 +0.90704563761546 +0.18613584195212 +0.22757469625008 +0.84736639858476 +0.17336967002616 +0.89232890977906 +0.82720750173978 +0.15351595803650 +0.67301807185670 +0.31529863726934 +0.64544221588972 +0.15977581883501 +0.31881798743326 +0.32548143473083 +0.57093210852830 +0.50715277844260 +0.02849441721621 +0.91495976294511 +0.71856031716435 +0.67198776080900 +0.81056231844221 +0.87440573539069 +0.71962515097232 +0.50307642557387 +0.76265845836830 +0.74918889615765 +0.49018047724802 +0.43587403133788 +0.79601624747205 +0.57226606366110 +0.23858735332484 +0.03031094086757 +0.15539026983738 +0.70912999286214 +0.96987113750414 +0.37023441976761 +0.19344196090348 +0.92144700477822 +0.75335399065430 +0.24614770608711 +0.16678737707181 +0.67387963017395 +0.86867710107548 +0.58706933692789 +0.60312554329572 +0.74118742840657 +0.61037453618362 +0.42327348411580 +0.72752437308678 +0.97758070581347 +0.54745935819843 +0.37808773617863 +0.59185225382694 +0.81967621520487 +0.94566229236244 +0.11244417310728 +0.47349383068317 +0.83777050899133 +0.51336444911024 +0.98975442884257 +0.27760064812326 +0.43215096619470 +0.01465744004170 +0.53535622021238 +0.02089496744830 +0.54073044259555 +0.68988816248347 +0.00477464521735 +0.77723224926727 +0.95596283833187 +0.62202522856195 +0.24710812225554 +0.22469906377002 +0.15572557557707 +0.16096609432528 +0.21580851895023 +1428368087 +1665524327 +1270317232 +1824115955 +512254602 +86349257 +726836169 +648218954 +1771285379 +1867253637 +1683712352 +1400185219 +1356940758 +1601759171 +1230636265 +1723299111 +172261367 +222986213 +969005022 +1011396380 +613710413 +1507530575 +461592300 +1799438731 +1263949021 +1737379567 +494813349 +971176659 +1805179369 +221345750 +1213262015 +1245539906 +823537597 +1763950955 +465969841 +1499397093 +212889760 +1932650612 +1665101351 +1718191066 +808552057 +139497366 +1584233128 +1792285903 +808611697 +1696608109 +591966004 +1245736921 +73591053 +288262780 +1883502475 +914479277 +1494647081 +427607079 +348451535 +1093170849 +976601775 +125583541 +1166593425 +1908382582 +1556307350 +1150847972 +1648718153 +92193637 +670730606 +1259013175 +430814400 +1483442407 +805308247 +1214921890 +912203341 +1669106275 +1928506533 +2139676987 +2032324070 +1939910549 +1755561975 +615917460 +1665791258 +551708917 +773804186 +295972610 +768536204 +840207220 +2124308057 +2105110470 +811894388 +1207833177 +721678025 +1090543742 +1727120188 +1107646163 +1186884834 +1825003313 +2134870661 +183116896 +956515367 +45148199 +1236293287 +1934801264 +1890181208 +66493912 +946242452 +623571602 +2114909637 +1026151105 +1175233941 +1808259128 +290876938 +1920460040 +398050799 +558695992 +1370603791 +69915127 +433963956 +1763268462 +1082755345 +1154379662 +1382592565 +1865474156 +1993554219 +2065273719 +1915537838 +2065403559 +813521382 +880532525 +922251345 +1670472148 +2063148946 +467652340 +1838888164 +180543021 +1661153355 +2109542934 +2116375730 +114052042 +1356969801 +300084364 +2063237281 +781410148 +2111805687 +1646975985 +1917610835 +1775597477 +1844495938 +1732012163 +378420045 +632659781 +665549512 +1434901869 +1344404273 +1971277308 +290254454 +1083372102 +895084232 +729814190 +624854114 +899912958 +257245571 +740331159 +307398963 +1146378559 +564320757 +1024779462 +1722493988 +629853638 +1467242619 +1123333445 +674786328 +1945686069 +1038818467 +1377383964 +1508592143 +1591781294 +751309967 +1287962425 +2024796058 +80440979 +1589263475 +218971170 +26882841 +2060952703 +2062276123 +1949546003 +452184916 +693844543 +286574064 +2079184783 +883182482 +1285429140 +1358476124 +1681488844 +423007346 +594894998 +236446631 +1270172052 +392193194 +2057970022 +1389147619 +1613926128 +1344404273 +1971277308 +290254454 +1083372102 +895084232 +729814190 +624854114 +899912958 +257245571 +740331159 +307398963 +1146378559 +564320757 +1024779462 +1722493988 +629853638 +1467242619 +1123333445 +674786328 +1945686069 +1038818467 +1377383964 +1508592143 +1591781294 +751309967 +1287962425 +2024796058 +80440979 +1589263475 +218971170 +26882841 +2060952703 +2062276123 +1949546003 +452184916 +693844543 +286574064 +2079184783 +883182482 +1285429140 +1358476124 +1681488844 +423007346 +594894998 +236446631 +1270172052 +392193194 +2057970022 +1389147619 +1613926128 +1070502497 +185458557 +394571982 +625063792 +1202551232 +1106745477 +1922274594 +1933100968 +1849320089 +2115080830 +1867777732 +2130631723 +596072318 +1653803768 +727441528 +1679567064 +199180016 +1759301942 +1362247603 +843443807 +2078602027 +1855953608 +248916061 +853446759 +55795458 +653874832 +60710992 +1588551358 +1066619885 +2096944326 +1459833265 +2067889981 +1180737744 +14153581 +1877497599 +1864031763 +288585453 +1490975114 +137051711 +1973393940 +1973776514 +238811539 +307692916 +1759733375 +1381965177 +1608191452 +865161446 +1908119138 +1935244809 +1454271467 diff -urN sprng5.orig/check/mlfg/mlfg.old.data sprng5/check/mlfg/mlfg.old.data --- sprng5.orig/check/mlfg/mlfg.old.data 2006-05-25 18:57:52.000000000 +0000 +++ sprng5/check/mlfg/mlfg.old.data 1970-01-01 00:00:00.000000000 +0000 @@ -1,1800 +0,0 @@ -1344404273 -1971277308 -290254454 -1083372102 -895084232 -729814190 -624854114 -899912958 -257245571 -740331159 -307398963 -1146378559 -564320757 -1024779462 -1722493988 -629853638 -1467242619 -1123333445 -674786328 -1945686069 -1038818467 -1377383964 -1508592143 -1591781294 -751309967 -1287962425 -2024796058 -80440979 -1589263475 -218971170 -26882841 -2060952703 -2062276123 -1949546003 -452184916 -693844543 -286574064 -2079184783 -883182482 -1285429140 -1358476124 -1681488844 -423007346 -594894998 -236446631 -1270172052 -392193194 -2057970022 -1389147619 -1613926128 -1415911066 -863754398 -176193777 -116183920 -553831988 -2129269519 -920281116 -816643758 -211608358 -667893922 -1013642387 -925903694 -1354637784 -1195408961 -405550226 -1160723497 -694730397 -453821204 -949196364 -945410040 -1662945891 -1382219580 -2043159770 -996618570 -178120018 -653579137 -820727623 -661270676 -2141607972 -957828023 -15599396 -934123276 -405498384 -1463894368 -1596350686 -1383971408 -401806818 -1899097687 -1435392747 -280044166 -451535797 -667891553 -328081257 -1404838802 -1372423908 -679494027 -1862006328 -2056473173 -269394493 -336138917 -909032177 -581660988 -314791878 -1175454363 -1663824789 -1975897213 -782860028 -947600045 -2056631522 -554900845 -958491825 -467464269 -1084419666 -324193819 -328410499 -925474559 -1110871928 -1813339558 -1629371405 -283333840 -1729397961 -699054089 -1676777235 -80120204 -563439214 -1123433668 -1571384470 -795397952 -1163568631 -1173697950 -875025470 -1270724394 -2074362053 -1991114956 -1924898827 -395467548 -1317995558 -835453867 -45848263 -490734899 -1254527314 -1166014910 -925010564 -1754993348 -1030617174 -515621579 -239727235 -312935503 -247970997 -2041231128 -807800855 -953023582 -935038439 -981096876 -433096946 -2121283663 -581202621 -1744378620 -828052051 -74082531 -757117088 -1470977045 -1226866639 -919321941 -2004121677 -883266750 -1785905196 -1773006200 -1364307522 -1538266683 -18772703 -789553563 -30980478 -1663359184 -2146435145 -662331959 -1757759233 -1033484021 -455632505 -290497330 -274470917 -422036712 -1189625250 -287261904 -108395007 -1351218821 -66569817 -1195242004 -1556977983 -179426526 -1267893111 -1760372829 -1817116431 -1075643649 -886526580 -919660953 -1321658356 -1722851223 -1609870321 -1978721730 -387611524 -571857310 -512754693 -594766505 -1586894221 -378514589 -705833231 -93189042 -574533467 -796035982 -618717082 -709622129 -1016621500 -769517324 -380070887 -884625363 -836560510 -717589286 -1760589264 -1752652145 -2012213828 -511359954 -1668989206 -1511804370 -625680404 -1239422926 -1462724929 -1363508673 -306812441 -3732111 -1531256075 -1081221917 -1743679436 -393721496 -34533623 -708088293 -1318475436 -102690723 -1171438382 -1467368976 -1391083255 -1102642459 -1336047243 -1621780307 -1371606554 -574540705 -1124015787 -927493373 -308200721 -1423045818 -672893583 -580263407 -457222401 -1029658533 -1776369839 -1835365956 -1170624327 -284752306 -2017154155 -610578098 -1141504663 -1262509647 -203926253 -1116964753 -208874102 -1179208379 -1603588990 -277718350 -1943719683 -1024149981 -1798173807 -1642621551 -1011879675 -2103040509 -1085044987 -716654720 -1508350038 -494027439 -480853088 -1944413426 -1147135970 -1157923848 -606027416 -99936483 -855056188 -1003971078 -1984960014 -772703801 -848514041 -1229059881 -1528038590 -638511859 -557013705 -1832400779 -1475322199 -1086818332 -743119971 -382299528 -968193075 -159961919 -1542723225 -25698362 -1988262367 -2018002873 -1936123554 -195327859 -657935247 -243670217 -1638126310 -1745855456 -1714186832 -2044971910 -1825844872 -681215965 -744580311 -1431909696 -617135926 -45883337 -404305660 -1418128758 -1696570016 -956993983 -1708546581 -15474574 -889607394 -1443832571 -906917449 -2006716320 -1406930240 -629365879 -1414409921 -733909111 -1657513754 -966853919 -103339508 -514184032 -1969441535 -1997515329 -585668431 -625417594 -1862889323 -1870417561 -30924413 -1121835174 -1000765102 -355482564 -134853724 -1233312675 -610694819 -92486554 -916554444 -1828453247 -201525650 -1131865759 -354840432 -2145379507 -250659414 -801197096 -2018786822 -78703238 -378982443 -1801681229 -1727827390 -1039879051 -615759336 -1759083332 -1202452667 -1908062337 -1197994628 -1828948812 -95424944 -1640450411 -828149985 -697423169 -1508613549 -1382079153 -1784539927 -1475773024 -1029085082 -1791303007 -1162136830 -583260098 -61759169 -1784938377 -305061817 -1653715166 -352382817 -857098300 -1625462612 -1481157488 -2042510187 -1524384019 -1504355392 -2065236858 -1840819437 -654648808 -153274497 -1150747834 -1153036354 -450218012 -1681901621 -1858459529 -1294988750 -1044913750 -1126516198 -778637056 -395295075 -1569926001 -1656974970 -1771840527 -1093679503 -299630624 -1724524913 -59638046 -663677881 -2025638847 -1613241068 -558081481 -669446626 -1469995534 -12318760 -1703817809 -1726527454 -1574550754 -2096330888 -88695219 -1136618393 -159529883 -459463337 -1878572988 -1746359419 -1922251707 -836786879 -234170641 -1388749363 -67486428 -606008713 -379090882 -1014454838 -1870606359 -493659301 -255397772 -1779960663 -1648318975 -1056415637 -1053562861 -946641171 -1638701732 -1484378635 -166919624 -73933550 -127478512 -67049277 -2141739038 -1383757011 -1277505226 -217627134 -1729686702 -215836453 -507829502 -1297262388 -1065023423 -1166162663 -2118370625 -1600373301 -582356622 -518727986 -1057479645 -1139371156 -760451006 -1298553848 -493656176 -755063548 -1221540431 -2066178339 -2107003517 -973995769 -1008442424 -664996150 -1643034021 -1997144721 -888214295 -1455347431 -1747211104 -953974185 -1854727271 -51950094 -1969226547 -385350350 -1353384322 -1556125725 -1351329627 -575727567 -1810222152 -616117321 -1817150626 -2099005577 -1513033110 -1194491985 -34369753 -0.556365 -0.464570 -0.988374 -0.578140 -0.951955 -0.577156 -0.849277 -0.242430 -0.334194 -0.057300 -0.446225 -0.873265 -0.942439 -0.953111 -0.411449 -0.113237 -0.187278 -0.294615 -0.818375 -0.780273 -0.951770 -0.013072 -0.323974 -0.512235 -0.362725 -0.363430 -0.275777 -0.123226 -0.652680 -0.994410 -0.086023 -0.777441 -0.479927 -0.669029 -0.682351 -0.394146 -0.886341 -0.029105 -0.737987 -0.879878 -0.280079 -0.913448 -0.227181 -0.894477 -0.486361 -0.420041 -0.065549 -0.557863 -0.062585 -0.260766 -0.809889 -0.726972 -0.726049 -0.190116 -0.906481 -0.514734 -0.036951 -0.933179 -0.751360 -0.438607 -0.578829 -0.582993 -0.547446 -0.953132 -0.197733 -0.810112 -0.685195 -0.663330 -0.581476 -0.852351 -0.750613 -0.850654 -0.766051 -0.092521 -0.443414 -0.175103 -0.702127 -0.296415 -0.129511 -0.401560 -0.335992 -0.658406 -0.028530 -0.382178 -0.243521 -0.269750 -0.220765 -0.144021 -0.503041 -0.461049 -0.589106 -0.528974 -0.543907 -0.401842 -0.848025 -0.546879 -0.153792 -0.871680 -0.783100 -0.319127 -0.881548 -0.054978 -0.240050 -0.668867 -0.773522 -0.615138 -0.460975 -0.112203 -0.255110 -0.843256 -0.495164 -0.820179 -0.658619 -0.311778 -0.569426 -0.998841 -0.659705 -0.987240 -0.670992 -0.938948 -0.145920 -0.240706 -0.321197 -0.603820 -0.845679 -0.352306 -0.189999 -0.881878 -0.406841 -0.915780 -0.600408 -0.977865 -0.949506 -0.677976 -0.999998 -0.275047 -0.287840 -0.949228 -0.070744 -0.802020 -0.391978 -0.907116 -0.677658 -0.574524 -0.706702 -0.752933 -0.260338 -0.999984 -0.553907 -0.308594 -0.292198 -0.149311 -0.962380 -0.463041 -0.405696 -0.337848 -0.414911 -0.022559 -0.176959 -0.469133 -0.110039 -0.154065 -0.699369 -0.870109 -0.314921 -0.541116 -0.718871 -0.287507 -0.980954 -0.559291 -0.105017 -0.871972 -0.709174 -0.371855 -0.609523 -0.497115 -0.474982 -0.186873 -0.390046 -0.673785 -0.251868 -0.320715 -0.410845 -0.830038 -0.579706 -0.165204 -0.861112 -0.298581 -0.975676 -0.549081 -0.025104 -0.950148 -0.981877 -0.074374 -0.771066 -0.835633 -0.224579 -0.528940 -0.795009 -0.390040 -0.455583 -0.944649 -0.676607 -0.924170 -0.722930 -0.003352 -0.917310 -0.199162 -0.506158 -0.131757 -0.605962 -0.774411 -0.394792 -0.738743 -0.535345 -0.700964 -0.881903 -0.201232 -0.942461 -0.399838 -0.186060 -0.230631 -0.853556 -0.427495 -0.055923 -0.985979 -0.761894 -0.672840 -0.624820 -0.570923 -0.864983 -0.487831 -0.471306 -0.983926 -0.965564 -0.608061 -0.423419 -0.744052 -0.829526 -0.085885 -0.716205 -0.617752 -0.076796 -0.093574 -0.476120 -0.672465 -0.395681 -0.329645 -0.935817 -0.080442 -0.961491 -0.840832 -0.246548 -0.697949 -0.720137 -0.246161 -0.101111 -0.010964 -0.757919 -0.140282 -0.349373 -0.369731 -0.144995 -0.948966 -0.180601 -0.147219 -0.242224 -0.615737 -0.126176 -0.622113 -0.698421 -0.869097 -0.256896 -0.503387 -0.364886 -0.185977 -0.081276 -0.700407 -0.828774 -0.725358 -0.888289 -0.175982 -0.763644 -0.147136 -0.063501 -0.315750 -0.420633 -0.823039 -0.210119 -0.003502 -0.162781 -0.247427 -0.340346 -0.857208 -0.730889 -0.254988 -0.546633 -0.390497 -0.791511 -0.485924 -0.283397 -0.607676 -0.497457 -0.485160 -0.346415 -0.571326 -0.988003 -0.896707 -0.909368 -0.032770 -0.898584 -0.240087 -0.855993 -0.808528 -0.548880 -0.904694 -0.609347 -0.941593 -0.585342 -0.468322 -0.028794 -0.890791 -0.620120 -0.285701 -0.985859 -0.533735 -0.291378 -0.329344 -0.019415 -0.110826 -0.656740 -0.445437 -0.555885 -0.286938 -0.230966 -0.096156 -0.979198 -0.641853 -0.311523 -0.637631 -0.244436 -0.140502 -0.248634 -0.413755 -0.275295 -0.715571 -0.306643 -0.928175 -0.879426 -0.476133 -0.064039 -0.265420 -0.623167 -0.790017 -0.486200 -0.255699 -0.367829 -0.072442 -0.752906 -0.146597 -0.211205 -0.382453 -0.106569 -0.766809 -0.994993 -0.488874 -0.673493 -0.093841 -0.081955 -0.484671 -0.939592 -0.234405 -0.839118 -0.371347 -0.936747 -0.878662 -0.762438 -0.497614 -0.241631 -0.346110 -0.667393 -0.238548 -0.964985 -0.548044 -0.706433 -0.156751 -0.450895 -0.747294 -0.505023 -0.147009 -0.763300 -0.526743 -0.966622 -0.775326 -0.075134 -0.850813 -0.546348 -0.716117 -0.606450 -0.764861 -0.565164 -0.232192 -0.887247 -0.738029 -0.753110 -0.013010 -0.222637 -0.300216 -0.481673 -0.023479 -0.280923 -0.381830 -0.508857 -0.722632 -0.008241 -0.216166 -0.949090 -0.440561 -0.690099 -0.876038 -0.699696 -0.368696 -0.960746 -0.771743 -0.966088 -0.843554 -0.915028 -0.168329 -0.933063 -0.948936 -0.685973 -0.721296 -0.768305 -0.286345 -0.346782 -0.783534 -0.679570 -0.975080 -0.999663 -0.455780 -0.081140 -0.835590 -0.588488 -0.927249 -0.470078 -0.490836 -0.897980 -0.281317 -0.012735 -0.092694 -0.594129 -0.425354 -0.373070 -0.292350 -0.961893 -0.676502 -0.948787 -0.588270 -0.339951 -0.271071 -0.257900 -0.895763 -0.839618 -0.695309 -0.971764 -0.385455 -0.049776 -0.092051 -0.265841 -0.632942 -0.580560 -0.651059 -0.897529 -0.642173 -0.360060 -0.277537 -0.414824 -0.698736 -0.645108 -0.023722 -0.163647 -0.805548 -0.507287 -0.388646 -0.829317 -0.459725 -0.335222 -0.808159 -0.038340 -0.849234 -0.530963 -0.011742 -0.727507 -0.422920 -0.214055 -0.718802 -0.087040 -0.254013 -0.880395 -0.127240 -0.85946695012587 -0.80056548692219 -0.39640787665780 -0.30348170192968 -0.97470308936659 -0.15183935089797 -0.80678229168707 -0.41596220466227 -0.46882840344583 -0.86467446685724 -0.88383852316380 -0.13910334436739 -0.51046210289985 -0.87410538081039 -0.43094011194741 -0.63968490852616 -0.33074547539987 -0.68302758839059 -0.28935077937821 -0.63981321390559 -0.96026837233886 -0.23811802199661 -0.11015051038739 -0.10228639123466 -0.42445707407712 -0.91892284528194 -0.34949370893663 -0.44087992840965 -0.07803874208123 -0.88262629989268 -0.60435421591064 -0.09281185965636 -0.71896288616325 -0.92521185176017 -0.07977189520257 -0.35379194231503 -0.30686128098497 -0.13939489354464 -0.91354304826045 -0.00239357327978 -0.89315284029164 -0.20755006448190 -0.80886747166137 -0.01223880374289 -0.27529479061168 -0.94885097548783 -0.88115642112811 -0.93601717172543 -0.97920099319651 -0.40692646552672 -0.28335740759159 -0.15193030046281 -0.52964895791582 -0.99236862384579 -0.39072970134332 -0.80892471991117 -0.66648069833687 -0.91860444149815 -0.93444964756581 -0.07700984911627 -0.19336476684994 -0.17254322252082 -0.33287036817726 -0.97530524855316 -0.02218692404079 -0.23647534577431 -0.82912597594910 -0.73396996587774 -0.95067069730043 -0.59470032664439 -0.18775462415836 -0.98948597084984 -0.98837499763500 -0.90422865807413 -0.63285132384081 -0.52649098010234 -0.77084279037276 -0.34835483881441 -0.74425879181949 -0.31627147315073 -0.39750202262375 -0.33600293010495 -0.27267557469964 -0.45294888366820 -0.37136739215805 -0.38240828232189 -0.72709027138574 -0.82911364323873 -0.81013993419170 -0.31047173417153 -0.11150243546357 -0.01872270340904 -0.65122285389416 -0.96533210099204 -0.07707090000422 -0.16315897867070 -0.18968465844986 -0.04513422410788 -0.54245412541945 -0.99834484551506 -0.19695437442412 -0.97634304967117 -0.49752501217347 -0.46339180836231 -0.92345651920539 -0.36119290353744 -0.62031737954453 -0.39639455474976 -0.51532146673407 -0.67559715285917 -0.06697862119140 -0.32714987412626 -0.00859764979173 -0.46307743364810 -0.45561644242125 -0.92600053170868 -0.87481932968075 -0.39712263331300 -0.66137359332269 -0.27162687728351 -0.93750666321480 -0.66078939867512 -0.80970984784050 -0.24849411903893 -0.46339573449724 -0.72413333835416 -0.89448935763164 -0.62521852945918 -0.28313638059790 -0.12269538994015 -0.80739956549571 -0.66250024791868 -0.09593994446749 -0.77215721048367 -0.77220170160662 -0.28316501029737 -0.90161074733187 -0.70147580958018 -0.30908784046016 -0.51723922330905 -0.28775894734101 -0.97178344688766 -0.62575423884819 -0.51542045411449 -0.74676570938357 -0.23819615512637 -0.70002304649226 -0.15057761347154 -0.60006375258574 -0.63112755508236 -0.55170698141761 -0.35850302853081 -0.37264263691868 -0.21435461387003 -0.02493232321893 -0.55130545599559 -0.43074249503634 -0.83507103750842 -0.73099197195015 -0.79720389216208 -0.03468113499158 -0.94950186840938 -0.63193396197243 -0.08450410350550 -0.18749560326950 -0.11407333649404 -0.70942111560032 -0.41480670603759 -0.08237400640921 -0.54266862789824 -0.18836253198059 -0.45539663771361 -0.36134790270536 -0.10665120831904 -0.61781824432736 -0.29373945174788 -0.61880511508321 -0.80597079738558 -0.04193730103877 -0.45777591709970 -0.78525237493057 -0.90739536187589 -0.22809322953320 -0.83230042596123 -0.85618984265886 -0.68122838123657 -0.83103891413751 -0.90767180519304 -0.14890630237246 -0.88719391199446 -0.98611578951938 -0.46214011945379 -0.75160953343117 -0.13398905613895 -0.16346613525851 -0.43303339109780 -0.34892176138497 -0.50702282492501 -0.97631422050038 -0.93911765305029 -0.42636173516627 -0.65485309931944 -0.22952002002581 -0.71331893721531 -0.78268716214510 -0.86641236755804 -0.56481786578417 -0.28671003623434 -0.95615602185464 -0.75723798426711 -0.25874970573985 -0.55237167659562 -0.96591099186892 -0.35145791890784 -0.52075056348867 -0.81978471983402 -0.94264769768073 -0.22671495147598 -0.71736867806491 -0.49601322222352 -0.26486393147445 -0.51351841999509 -0.01454799240635 -0.04353412037532 -0.02860247127062 -0.02841255233654 -0.49618141751992 -0.14770945990786 -0.85147523337192 -0.14751009683938 -0.16193010351461 -0.59463235725218 -0.17244194835469 -0.85241662900740 -0.39121635935361 -0.43060632824598 -0.15210475353851 -0.32025952301746 -0.11885676522209 -0.90883511166407 -0.41349462471682 -0.02710297992735 -0.50462328235337 -0.97311077202069 -0.14548304106656 -0.09000237643191 -0.32637376266085 -0.73140002168361 -0.25421256360450 -0.66124968707229 -0.84082228972246 -0.58059365452682 -0.17838947416790 -0.09666475154608 -0.11424099049151 -0.99754656359987 -0.07215969777675 -0.04678411506190 -0.41273479283618 -0.56392632739435 -0.94351912744514 -0.35461403274363 -0.68804698080462 -0.68693652178112 -0.11815054430796 -0.80969919454586 -0.04977707560794 -0.45585533049243 -0.76244201016829 -0.26588020696119 -0.28692575805366 -0.07156898425345 -0.50877163076699 -0.78787604366826 -0.06086863628077 -0.83916967653645 -0.58712064686126 -0.26287989406865 -0.08490745519403 -0.01403989849807 -0.00632466724933 -0.81911777066838 -0.44176692587976 -0.19611076015327 -0.04855708030016 -0.69417526104711 -0.93381073060807 -0.75439764792612 -0.45663934505440 -0.05407957211177 -0.18312074968758 -0.09883943964941 -0.98846923813337 -0.70291464913607 -0.88909192620075 -0.21367536361993 -0.43679440437918 -0.29871227072608 -0.67479945674044 -0.40980925564576 -0.70996175216629 -0.95366018725589 -0.48075945067130 -0.83985108486118 -0.78391528783113 -0.59850713147345 -0.07145924344622 -0.82743318743691 -0.07718654192813 -0.00475494506683 -0.21062738131877 -0.24820841598252 -0.04925861833583 -0.15961829993920 -0.46244800765542 -0.32622426254585 -0.58902624970504 -0.76111683911418 -0.62602055927647 -0.24915654979955 -0.21453147343906 -0.13917292166892 -0.78261868199577 -0.90407578319224 -0.64269810726328 -0.34421569150925 -0.38834540609775 -0.85295927187742 -0.97604630413758 -0.92275339501656 -0.60656874670885 -0.78052304178928 -0.11232254294913 -0.23615491325053 -0.37017074416552 -0.54904650610977 -0.23025353849609 -0.83418059937786 -0.96942830554942 -0.46636752315076 -0.17791276035923 -0.91874920068474 -0.88275662029807 -0.15431314794949 -0.27788715937211 -0.94024072930113 -0.67330725751651 -0.71305095881507 -0.10143158260350 -0.47075359401464 -0.38411039546125 -0.71569386549073 -0.08010477860399 -0.95856060891146 -0.22704756719775 -0.31337251414570 -0.73880289599004 -0.64281842501174 -0.02494690599583 -0.45172745134082 -0.61737429986686 -0.39330579719335 -0.90153911085042 -0.52463465376154 -0.81335401544551 -0.44615395795954 -0.47198312760876 -0.27526717095613 -0.12852570790385 -0.58667025718580 -0.70467450308716 -0.84240069042223 -0.48956113506305 -0.37194763477258 -0.66297414145676 -0.51378403401043 -0.30911982324676 -0.60266344770939 -0.33357813711707 -0.08044358770383 -0.52354552871638 -0.14783240365495 -0.87910231141956 -0.44706123715282 -0.11499352245197 -0.88960222028327 -0.52944266387240 -0.22718574716011 -0.76495937757460 -0.05351501111166 -0.43996714557439 -0.13835074220107 -0.42355586507782 -0.26704607994602 -0.67179288052483 -0.06845778996343 -0.43994161176626 -0.27130393775691 -0.57455745750582 -0.30940025188281 -0.61545544056404 -0.56102198900356 -0.18319454815460 -0.86886330510216 -0.34092270950420 -0.02118216653959 -0.15792182966227 -0.40078241915828 -0.10640342617356 -0.05332129757032 -0.56017947847911 -0.32214601452229 -0.21311799031540 -0.81690205774055 -0.24296072470632 -0.43711577893629 -0.43157526807752 -0.17399287996012 -0.13844320634899 -0.01547680655846 -0.39881774502858 -0.40771913173368 -0.27326264828934 -0.19060341611863 -0.90704563761546 -0.18613584195212 -0.22757469625008 -0.84736639858476 -0.17336967002616 -0.89232890977906 -0.82720750173978 -0.15351595803650 -0.67301807185670 -0.31529863726934 -0.64544221588972 -0.15977581883501 -0.31881798743326 -0.32548143473083 -0.57093210852830 -0.50715277844260 -0.02849441721621 -0.91495976294511 -0.71856031716435 -0.67198776080900 -0.81056231844221 -0.87440573539069 -0.71962515097232 -0.50307642557387 -0.76265845836830 -0.74918889615765 -0.49018047724802 -0.43587403133788 -0.79601624747205 -0.57226606366110 -0.23858735332484 -0.03031094086757 -0.15539026983738 -0.70912999286214 -0.96987113750414 -0.37023441976761 -0.19344196090348 -0.92144700477822 -0.75335399065430 -0.24614770608711 -0.16678737707181 -0.67387963017395 -0.86867710107548 -0.58706933692789 -0.60312554329572 -0.74118742840657 -0.61037453618362 -0.42327348411580 -0.72752437308678 -0.97758070581347 -0.54745935819843 -0.37808773617863 -0.59185225382694 -0.81967621520487 -0.94566229236244 -0.11244417310728 -0.47349383068317 -0.83777050899133 -0.51336444911024 -0.98975442884257 -0.27760064812326 -0.43215096619470 -0.01465744004170 -0.53535622021238 -0.02089496744830 -0.54073044259555 -0.68988816248347 -0.00477464521735 -0.77723224926727 -0.95596283833187 -0.62202522856195 -0.24710812225554 -0.22469906377002 -0.15572557557707 -0.16096609432528 -0.21580851895023 -1428368087 -1665524327 -1270317232 -1824115955 -512254602 -86349257 -726836169 -648218954 -1771285379 -1867253637 -1683712352 -1400185219 -1356940758 -1601759171 -1230636265 -1723299111 -172261367 -222986213 -969005022 -1011396380 -613710413 -1507530575 -461592300 -1799438731 -1263949021 -1737379567 -494813349 -971176659 -1805179369 -221345750 -1213262015 -1245539906 -823537597 -1763950955 -465969841 -1499397093 -212889760 -1932650612 -1665101351 -1718191066 -808552057 -139497366 -1584233128 -1792285903 -808611697 -1696608109 -591966004 -1245736921 -73591053 -288262780 -1883502475 -914479277 -1494647081 -427607079 -348451535 -1093170849 -976601775 -125583541 -1166593425 -1908382582 -1556307350 -1150847972 -1648718153 -92193637 -670730606 -1259013175 -430814400 -1483442407 -805308247 -1214921890 -912203341 -1669106275 -1928506533 -2139676987 -2032324070 -1939910549 -1755561975 -615917460 -1665791258 -551708917 -773804186 -295972610 -768536204 -840207220 -2124308057 -2105110470 -811894388 -1207833177 -721678025 -1090543742 -1727120188 -1107646163 -1186884834 -1825003313 -2134870661 -183116896 -956515367 -45148199 -1236293287 -1934801264 -1890181208 -66493912 -946242452 -623571602 -2114909637 -1026151105 -1175233941 -1808259128 -290876938 -1920460040 -398050799 -558695992 -1370603791 -69915127 -433963956 -1763268462 -1082755345 -1154379662 -1382592565 -1865474156 -1993554219 -2065273719 -1915537838 -2065403559 -813521382 -880532525 -922251345 -1670472148 -2063148946 -467652340 -1838888164 -180543021 -1661153355 -2109542934 -2116375730 -114052042 -1356969801 -300084364 -2063237281 -781410148 -2111805687 -1646975985 -1917610835 -1775597477 -1844495938 -1732012163 -378420045 -632659781 -665549512 -1434901869 -1344404273 -1971277308 -290254454 -1083372102 -895084232 -729814190 -624854114 -899912958 -257245571 -740331159 -307398963 -1146378559 -564320757 -1024779462 -1722493988 -629853638 -1467242619 -1123333445 -674786328 -1945686069 -1038818467 -1377383964 -1508592143 -1591781294 -751309967 -1287962425 -2024796058 -80440979 -1589263475 -218971170 -26882841 -2060952703 -2062276123 -1949546003 -452184916 -693844543 -286574064 -2079184783 -883182482 -1285429140 -1358476124 -1681488844 -423007346 -594894998 -236446631 -1270172052 -392193194 -2057970022 -1389147619 -1613926128 -1344404273 -1971277308 -290254454 -1083372102 -895084232 -729814190 -624854114 -899912958 -257245571 -740331159 -307398963 -1146378559 -564320757 -1024779462 -1722493988 -629853638 -1467242619 -1123333445 -674786328 -1945686069 -1038818467 -1377383964 -1508592143 -1591781294 -751309967 -1287962425 -2024796058 -80440979 -1589263475 -218971170 -26882841 -2060952703 -2062276123 -1949546003 -452184916 -693844543 -286574064 -2079184783 -883182482 -1285429140 -1358476124 -1681488844 -423007346 -594894998 -236446631 -1270172052 -392193194 -2057970022 -1389147619 -1613926128 -1070502497 -185458557 -394571982 -625063792 -1202551232 -1106745477 -1922274594 -1933100968 -1849320089 -2115080830 -1867777732 -2130631723 -596072318 -1653803768 -727441528 -1679567064 -199180016 -1759301942 -1362247603 -843443807 -2078602027 -1855953608 -248916061 -853446759 -55795458 -653874832 -60710992 -1588551358 -1066619885 -2096944326 -1459833265 -2067889981 -1180737744 -14153581 -1877497599 -1864031763 -288585453 -1490975114 -137051711 -1973393940 -1973776514 -238811539 -307692916 -1759733375 -1381965177 -1608191452 -865161446 -1908119138 -1935244809 -1454271467 diff -urN sprng5.orig/check/mlfg/mlfg.orig.data sprng5/check/mlfg/mlfg.orig.data --- sprng5.orig/check/mlfg/mlfg.orig.data 1970-01-01 00:00:00.000000000 +0000 +++ sprng5/check/mlfg/mlfg.orig.data 2006-05-25 18:57:52.000000000 +0000 @@ -0,0 +1,1800 @@ +1344404273 +1971277308 +290254454 +1083372102 +895084232 +729814190 +624854114 +899912958 +257245571 +740331159 +307398963 +1146378559 +564320757 +1024779462 +1722493988 +629853638 +1467242619 +1123333445 +674786328 +1945686069 +1038818467 +1377383964 +1508592143 +1591781294 +751309967 +1287962425 +2024796058 +80440979 +1589263475 +218971170 +26882841 +2060952703 +2062276123 +1949546003 +452184916 +693844543 +286574064 +2079184783 +883182482 +1285429140 +1358476124 +1681488844 +423007346 +594894998 +236446631 +1270172052 +392193194 +2057970022 +1389147619 +1613926128 +1415911066 +863754398 +176193777 +116183920 +553831988 +2129269519 +920281116 +816643758 +211608358 +667893922 +1013642387 +925903694 +1354637784 +1195408961 +405550226 +1160723497 +694730397 +453821204 +949196364 +945410040 +1662945891 +1382219580 +2043159770 +996618570 +178120018 +653579137 +820727623 +661270676 +2141607972 +957828023 +15599396 +934123276 +405498384 +1463894368 +1596350686 +1383971408 +401806818 +1899097687 +1435392747 +280044166 +451535797 +667891553 +328081257 +1404838802 +1372423908 +679494027 +1862006328 +2056473173 +269394493 +336138917 +909032177 +581660988 +314791878 +1175454363 +1663824789 +1975897213 +782860028 +947600045 +2056631522 +554900845 +958491825 +467464269 +1084419666 +324193819 +328410499 +925474559 +1110871928 +1813339558 +1629371405 +283333840 +1729397961 +699054089 +1676777235 +80120204 +563439214 +1123433668 +1571384470 +795397952 +1163568631 +1173697950 +875025470 +1270724394 +2074362053 +1991114956 +1924898827 +395467548 +1317995558 +835453867 +45848263 +490734899 +1254527314 +1166014910 +925010564 +1754993348 +1030617174 +515621579 +239727235 +312935503 +247970997 +2041231128 +807800855 +953023582 +935038439 +981096876 +433096946 +2121283663 +581202621 +1744378620 +828052051 +74082531 +757117088 +1470977045 +1226866639 +919321941 +2004121677 +883266750 +1785905196 +1773006200 +1364307522 +1538266683 +18772703 +789553563 +30980478 +1663359184 +2146435145 +662331959 +1757759233 +1033484021 +455632505 +290497330 +274470917 +422036712 +1189625250 +287261904 +108395007 +1351218821 +66569817 +1195242004 +1556977983 +179426526 +1267893111 +1760372829 +1817116431 +1075643649 +886526580 +919660953 +1321658356 +1722851223 +1609870321 +1978721730 +387611524 +571857310 +512754693 +594766505 +1586894221 +378514589 +705833231 +93189042 +574533467 +796035982 +618717082 +709622129 +1016621500 +769517324 +380070887 +884625363 +836560510 +717589286 +1760589264 +1752652145 +2012213828 +511359954 +1668989206 +1511804370 +625680404 +1239422926 +1462724929 +1363508673 +306812441 +3732111 +1531256075 +1081221917 +1743679436 +393721496 +34533623 +708088293 +1318475436 +102690723 +1171438382 +1467368976 +1391083255 +1102642459 +1336047243 +1621780307 +1371606554 +574540705 +1124015787 +927493373 +308200721 +1423045818 +672893583 +580263407 +457222401 +1029658533 +1776369839 +1835365956 +1170624327 +284752306 +2017154155 +610578098 +1141504663 +1262509647 +203926253 +1116964753 +208874102 +1179208379 +1603588990 +277718350 +1943719683 +1024149981 +1798173807 +1642621551 +1011879675 +2103040509 +1085044987 +716654720 +1508350038 +494027439 +480853088 +1944413426 +1147135970 +1157923848 +606027416 +99936483 +855056188 +1003971078 +1984960014 +772703801 +848514041 +1229059881 +1528038590 +638511859 +557013705 +1832400779 +1475322199 +1086818332 +743119971 +382299528 +968193075 +159961919 +1542723225 +25698362 +1988262367 +2018002873 +1936123554 +195327859 +657935247 +243670217 +1638126310 +1745855456 +1714186832 +2044971910 +1825844872 +681215965 +744580311 +1431909696 +617135926 +45883337 +404305660 +1418128758 +1696570016 +956993983 +1708546581 +15474574 +889607394 +1443832571 +906917449 +2006716320 +1406930240 +629365879 +1414409921 +733909111 +1657513754 +966853919 +103339508 +514184032 +1969441535 +1997515329 +585668431 +625417594 +1862889323 +1870417561 +30924413 +1121835174 +1000765102 +355482564 +134853724 +1233312675 +610694819 +92486554 +916554444 +1828453247 +201525650 +1131865759 +354840432 +2145379507 +250659414 +801197096 +2018786822 +78703238 +378982443 +1801681229 +1727827390 +1039879051 +615759336 +1759083332 +1202452667 +1908062337 +1197994628 +1828948812 +95424944 +1640450411 +828149985 +697423169 +1508613549 +1382079153 +1784539927 +1475773024 +1029085082 +1791303007 +1162136830 +583260098 +61759169 +1784938377 +305061817 +1653715166 +352382817 +857098300 +1625462612 +1481157488 +2042510187 +1524384019 +1504355392 +2065236858 +1840819437 +654648808 +153274497 +1150747834 +1153036354 +450218012 +1681901621 +1858459529 +1294988750 +1044913750 +1126516198 +778637056 +395295075 +1569926001 +1656974970 +1771840527 +1093679503 +299630624 +1724524913 +59638046 +663677881 +2025638847 +1613241068 +558081481 +669446626 +1469995534 +12318760 +1703817809 +1726527454 +1574550754 +2096330888 +88695219 +1136618393 +159529883 +459463337 +1878572988 +1746359419 +1922251707 +836786879 +234170641 +1388749363 +67486428 +606008713 +379090882 +1014454838 +1870606359 +493659301 +255397772 +1779960663 +1648318975 +1056415637 +1053562861 +946641171 +1638701732 +1484378635 +166919624 +73933550 +127478512 +67049277 +2141739038 +1383757011 +1277505226 +217627134 +1729686702 +215836453 +507829502 +1297262388 +1065023423 +1166162663 +2118370625 +1600373301 +582356622 +518727986 +1057479645 +1139371156 +760451006 +1298553848 +493656176 +755063548 +1221540431 +2066178339 +2107003517 +973995769 +1008442424 +664996150 +1643034021 +1997144721 +888214295 +1455347431 +1747211104 +953974185 +1854727271 +51950094 +1969226547 +385350350 +1353384322 +1556125725 +1351329627 +575727567 +1810222152 +616117321 +1817150626 +2099005577 +1513033110 +1194491985 +34369753 +0.556365 +0.464570 +0.988374 +0.578140 +0.951955 +0.577156 +0.849277 +0.242430 +0.334194 +0.057300 +0.446225 +0.873265 +0.942439 +0.953111 +0.411449 +0.113237 +0.187278 +0.294615 +0.818375 +0.780273 +0.951770 +0.013072 +0.323974 +0.512235 +0.362725 +0.363430 +0.275777 +0.123226 +0.652680 +0.994410 +0.086023 +0.777441 +0.479927 +0.669029 +0.682351 +0.394146 +0.886341 +0.029105 +0.737987 +0.879878 +0.280079 +0.913448 +0.227181 +0.894477 +0.486361 +0.420041 +0.065549 +0.557863 +0.062585 +0.260766 +0.809889 +0.726972 +0.726049 +0.190116 +0.906481 +0.514734 +0.036951 +0.933179 +0.751360 +0.438607 +0.578829 +0.582993 +0.547446 +0.953132 +0.197733 +0.810112 +0.685195 +0.663330 +0.581476 +0.852351 +0.750613 +0.850654 +0.766051 +0.092521 +0.443414 +0.175103 +0.702127 +0.296415 +0.129511 +0.401560 +0.335992 +0.658406 +0.028530 +0.382178 +0.243521 +0.269750 +0.220765 +0.144021 +0.503041 +0.461049 +0.589106 +0.528974 +0.543907 +0.401842 +0.848025 +0.546879 +0.153792 +0.871680 +0.783100 +0.319127 +0.881548 +0.054978 +0.240050 +0.668867 +0.773522 +0.615138 +0.460975 +0.112203 +0.255110 +0.843256 +0.495164 +0.820179 +0.658619 +0.311778 +0.569426 +0.998841 +0.659705 +0.987240 +0.670992 +0.938948 +0.145920 +0.240706 +0.321197 +0.603820 +0.845679 +0.352306 +0.189999 +0.881878 +0.406841 +0.915780 +0.600408 +0.977865 +0.949506 +0.677976 +0.999998 +0.275047 +0.287840 +0.949228 +0.070744 +0.802020 +0.391978 +0.907116 +0.677658 +0.574524 +0.706702 +0.752933 +0.260338 +0.999984 +0.553907 +0.308594 +0.292198 +0.149311 +0.962380 +0.463041 +0.405696 +0.337848 +0.414911 +0.022559 +0.176959 +0.469133 +0.110039 +0.154065 +0.699369 +0.870109 +0.314921 +0.541116 +0.718871 +0.287507 +0.980954 +0.559291 +0.105017 +0.871972 +0.709174 +0.371855 +0.609523 +0.497115 +0.474982 +0.186873 +0.390046 +0.673785 +0.251868 +0.320715 +0.410845 +0.830038 +0.579706 +0.165204 +0.861112 +0.298581 +0.975676 +0.549081 +0.025104 +0.950148 +0.981877 +0.074374 +0.771066 +0.835633 +0.224579 +0.528940 +0.795009 +0.390040 +0.455583 +0.944649 +0.676607 +0.924170 +0.722930 +0.003352 +0.917310 +0.199162 +0.506158 +0.131757 +0.605962 +0.774411 +0.394792 +0.738743 +0.535345 +0.700964 +0.881903 +0.201232 +0.942461 +0.399838 +0.186060 +0.230631 +0.853556 +0.427495 +0.055923 +0.985979 +0.761894 +0.672840 +0.624820 +0.570923 +0.864983 +0.487831 +0.471306 +0.983926 +0.965564 +0.608061 +0.423419 +0.744052 +0.829526 +0.085885 +0.716205 +0.617752 +0.076796 +0.093574 +0.476120 +0.672465 +0.395681 +0.329645 +0.935817 +0.080442 +0.961491 +0.840832 +0.246548 +0.697949 +0.720137 +0.246161 +0.101111 +0.010964 +0.757919 +0.140282 +0.349373 +0.369731 +0.144995 +0.948966 +0.180601 +0.147219 +0.242224 +0.615737 +0.126176 +0.622113 +0.698421 +0.869097 +0.256896 +0.503387 +0.364886 +0.185977 +0.081276 +0.700407 +0.828774 +0.725358 +0.888289 +0.175982 +0.763644 +0.147136 +0.063501 +0.315750 +0.420633 +0.823039 +0.210119 +0.003502 +0.162781 +0.247427 +0.340346 +0.857208 +0.730889 +0.254988 +0.546633 +0.390497 +0.791511 +0.485924 +0.283397 +0.607676 +0.497457 +0.485160 +0.346415 +0.571326 +0.988003 +0.896707 +0.909368 +0.032770 +0.898584 +0.240087 +0.855993 +0.808528 +0.548880 +0.904694 +0.609347 +0.941593 +0.585342 +0.468322 +0.028794 +0.890791 +0.620120 +0.285701 +0.985859 +0.533735 +0.291378 +0.329344 +0.019415 +0.110826 +0.656740 +0.445437 +0.555885 +0.286938 +0.230966 +0.096156 +0.979198 +0.641853 +0.311523 +0.637631 +0.244436 +0.140502 +0.248634 +0.413755 +0.275295 +0.715571 +0.306643 +0.928175 +0.879426 +0.476133 +0.064039 +0.265420 +0.623167 +0.790017 +0.486200 +0.255699 +0.367829 +0.072442 +0.752906 +0.146597 +0.211205 +0.382453 +0.106569 +0.766809 +0.994993 +0.488874 +0.673493 +0.093841 +0.081955 +0.484671 +0.939592 +0.234405 +0.839118 +0.371347 +0.936747 +0.878662 +0.762438 +0.497614 +0.241631 +0.346110 +0.667393 +0.238548 +0.964985 +0.548044 +0.706433 +0.156751 +0.450895 +0.747294 +0.505023 +0.147009 +0.763300 +0.526743 +0.966622 +0.775326 +0.075134 +0.850813 +0.546348 +0.716117 +0.606450 +0.764861 +0.565164 +0.232192 +0.887247 +0.738029 +0.753110 +0.013010 +0.222637 +0.300216 +0.481673 +0.023479 +0.280923 +0.381830 +0.508857 +0.722632 +0.008241 +0.216166 +0.949090 +0.440561 +0.690099 +0.876038 +0.699696 +0.368696 +0.960746 +0.771743 +0.966088 +0.843554 +0.915028 +0.168329 +0.933063 +0.948936 +0.685973 +0.721296 +0.768305 +0.286345 +0.346782 +0.783534 +0.679570 +0.975080 +0.999663 +0.455780 +0.081140 +0.835590 +0.588488 +0.927249 +0.470078 +0.490836 +0.897980 +0.281317 +0.012735 +0.092694 +0.594129 +0.425354 +0.373070 +0.292350 +0.961893 +0.676502 +0.948787 +0.588270 +0.339951 +0.271071 +0.257900 +0.895763 +0.839618 +0.695309 +0.971764 +0.385455 +0.049776 +0.092051 +0.265841 +0.632942 +0.580560 +0.651059 +0.897529 +0.642173 +0.360060 +0.277537 +0.414824 +0.698736 +0.645108 +0.023722 +0.163647 +0.805548 +0.507287 +0.388646 +0.829317 +0.459725 +0.335222 +0.808159 +0.038340 +0.849234 +0.530963 +0.011742 +0.727507 +0.422920 +0.214055 +0.718802 +0.087040 +0.254013 +0.880395 +0.127240 +0.85946695012587 +0.80056548692219 +0.39640787665780 +0.30348170192968 +0.97470308936659 +0.15183935089797 +0.80678229168707 +0.41596220466227 +0.46882840344583 +0.86467446685724 +0.88383852316380 +0.13910334436739 +0.51046210289985 +0.87410538081039 +0.43094011194741 +0.63968490852616 +0.33074547539987 +0.68302758839059 +0.28935077937821 +0.63981321390559 +0.96026837233886 +0.23811802199661 +0.11015051038739 +0.10228639123466 +0.42445707407712 +0.91892284528194 +0.34949370893663 +0.44087992840965 +0.07803874208123 +0.88262629989268 +0.60435421591064 +0.09281185965636 +0.71896288616325 +0.92521185176017 +0.07977189520257 +0.35379194231503 +0.30686128098497 +0.13939489354464 +0.91354304826045 +0.00239357327978 +0.89315284029164 +0.20755006448190 +0.80886747166137 +0.01223880374289 +0.27529479061168 +0.94885097548783 +0.88115642112811 +0.93601717172543 +0.97920099319651 +0.40692646552672 +0.28335740759159 +0.15193030046281 +0.52964895791582 +0.99236862384579 +0.39072970134332 +0.80892471991117 +0.66648069833687 +0.91860444149815 +0.93444964756581 +0.07700984911627 +0.19336476684994 +0.17254322252082 +0.33287036817726 +0.97530524855316 +0.02218692404079 +0.23647534577431 +0.82912597594910 +0.73396996587774 +0.95067069730043 +0.59470032664439 +0.18775462415836 +0.98948597084984 +0.98837499763500 +0.90422865807413 +0.63285132384081 +0.52649098010234 +0.77084279037276 +0.34835483881441 +0.74425879181949 +0.31627147315073 +0.39750202262375 +0.33600293010495 +0.27267557469964 +0.45294888366820 +0.37136739215805 +0.38240828232189 +0.72709027138574 +0.82911364323873 +0.81013993419170 +0.31047173417153 +0.11150243546357 +0.01872270340904 +0.65122285389416 +0.96533210099204 +0.07707090000422 +0.16315897867070 +0.18968465844986 +0.04513422410788 +0.54245412541945 +0.99834484551506 +0.19695437442412 +0.97634304967117 +0.49752501217347 +0.46339180836231 +0.92345651920539 +0.36119290353744 +0.62031737954453 +0.39639455474976 +0.51532146673407 +0.67559715285917 +0.06697862119140 +0.32714987412626 +0.00859764979173 +0.46307743364810 +0.45561644242125 +0.92600053170868 +0.87481932968075 +0.39712263331300 +0.66137359332269 +0.27162687728351 +0.93750666321480 +0.66078939867512 +0.80970984784050 +0.24849411903893 +0.46339573449724 +0.72413333835416 +0.89448935763164 +0.62521852945918 +0.28313638059790 +0.12269538994015 +0.80739956549571 +0.66250024791868 +0.09593994446749 +0.77215721048367 +0.77220170160662 +0.28316501029737 +0.90161074733187 +0.70147580958018 +0.30908784046016 +0.51723922330905 +0.28775894734101 +0.97178344688766 +0.62575423884819 +0.51542045411449 +0.74676570938357 +0.23819615512637 +0.70002304649226 +0.15057761347154 +0.60006375258574 +0.63112755508236 +0.55170698141761 +0.35850302853081 +0.37264263691868 +0.21435461387003 +0.02493232321893 +0.55130545599559 +0.43074249503634 +0.83507103750842 +0.73099197195015 +0.79720389216208 +0.03468113499158 +0.94950186840938 +0.63193396197243 +0.08450410350550 +0.18749560326950 +0.11407333649404 +0.70942111560032 +0.41480670603759 +0.08237400640921 +0.54266862789824 +0.18836253198059 +0.45539663771361 +0.36134790270536 +0.10665120831904 +0.61781824432736 +0.29373945174788 +0.61880511508321 +0.80597079738558 +0.04193730103877 +0.45777591709970 +0.78525237493057 +0.90739536187589 +0.22809322953320 +0.83230042596123 +0.85618984265886 +0.68122838123657 +0.83103891413751 +0.90767180519304 +0.14890630237246 +0.88719391199446 +0.98611578951938 +0.46214011945379 +0.75160953343117 +0.13398905613895 +0.16346613525851 +0.43303339109780 +0.34892176138497 +0.50702282492501 +0.97631422050038 +0.93911765305029 +0.42636173516627 +0.65485309931944 +0.22952002002581 +0.71331893721531 +0.78268716214510 +0.86641236755804 +0.56481786578417 +0.28671003623434 +0.95615602185464 +0.75723798426711 +0.25874970573985 +0.55237167659562 +0.96591099186892 +0.35145791890784 +0.52075056348867 +0.81978471983402 +0.94264769768073 +0.22671495147598 +0.71736867806491 +0.49601322222352 +0.26486393147445 +0.51351841999509 +0.01454799240635 +0.04353412037532 +0.02860247127062 +0.02841255233654 +0.49618141751992 +0.14770945990786 +0.85147523337192 +0.14751009683938 +0.16193010351461 +0.59463235725218 +0.17244194835469 +0.85241662900740 +0.39121635935361 +0.43060632824598 +0.15210475353851 +0.32025952301746 +0.11885676522209 +0.90883511166407 +0.41349462471682 +0.02710297992735 +0.50462328235337 +0.97311077202069 +0.14548304106656 +0.09000237643191 +0.32637376266085 +0.73140002168361 +0.25421256360450 +0.66124968707229 +0.84082228972246 +0.58059365452682 +0.17838947416790 +0.09666475154608 +0.11424099049151 +0.99754656359987 +0.07215969777675 +0.04678411506190 +0.41273479283618 +0.56392632739435 +0.94351912744514 +0.35461403274363 +0.68804698080462 +0.68693652178112 +0.11815054430796 +0.80969919454586 +0.04977707560794 +0.45585533049243 +0.76244201016829 +0.26588020696119 +0.28692575805366 +0.07156898425345 +0.50877163076699 +0.78787604366826 +0.06086863628077 +0.83916967653645 +0.58712064686126 +0.26287989406865 +0.08490745519403 +0.01403989849807 +0.00632466724933 +0.81911777066838 +0.44176692587976 +0.19611076015327 +0.04855708030016 +0.69417526104711 +0.93381073060807 +0.75439764792612 +0.45663934505440 +0.05407957211177 +0.18312074968758 +0.09883943964941 +0.98846923813337 +0.70291464913607 +0.88909192620075 +0.21367536361993 +0.43679440437918 +0.29871227072608 +0.67479945674044 +0.40980925564576 +0.70996175216629 +0.95366018725589 +0.48075945067130 +0.83985108486118 +0.78391528783113 +0.59850713147345 +0.07145924344622 +0.82743318743691 +0.07718654192813 +0.00475494506683 +0.21062738131877 +0.24820841598252 +0.04925861833583 +0.15961829993920 +0.46244800765542 +0.32622426254585 +0.58902624970504 +0.76111683911418 +0.62602055927647 +0.24915654979955 +0.21453147343906 +0.13917292166892 +0.78261868199577 +0.90407578319224 +0.64269810726328 +0.34421569150925 +0.38834540609775 +0.85295927187742 +0.97604630413758 +0.92275339501656 +0.60656874670885 +0.78052304178928 +0.11232254294913 +0.23615491325053 +0.37017074416552 +0.54904650610977 +0.23025353849609 +0.83418059937786 +0.96942830554942 +0.46636752315076 +0.17791276035923 +0.91874920068474 +0.88275662029807 +0.15431314794949 +0.27788715937211 +0.94024072930113 +0.67330725751651 +0.71305095881507 +0.10143158260350 +0.47075359401464 +0.38411039546125 +0.71569386549073 +0.08010477860399 +0.95856060891146 +0.22704756719775 +0.31337251414570 +0.73880289599004 +0.64281842501174 +0.02494690599583 +0.45172745134082 +0.61737429986686 +0.39330579719335 +0.90153911085042 +0.52463465376154 +0.81335401544551 +0.44615395795954 +0.47198312760876 +0.27526717095613 +0.12852570790385 +0.58667025718580 +0.70467450308716 +0.84240069042223 +0.48956113506305 +0.37194763477258 +0.66297414145676 +0.51378403401043 +0.30911982324676 +0.60266344770939 +0.33357813711707 +0.08044358770383 +0.52354552871638 +0.14783240365495 +0.87910231141956 +0.44706123715282 +0.11499352245197 +0.88960222028327 +0.52944266387240 +0.22718574716011 +0.76495937757460 +0.05351501111166 +0.43996714557439 +0.13835074220107 +0.42355586507782 +0.26704607994602 +0.67179288052483 +0.06845778996343 +0.43994161176626 +0.27130393775691 +0.57455745750582 +0.30940025188281 +0.61545544056404 +0.56102198900356 +0.18319454815460 +0.86886330510216 +0.34092270950420 +0.02118216653959 +0.15792182966227 +0.40078241915828 +0.10640342617356 +0.05332129757032 +0.56017947847911 +0.32214601452229 +0.21311799031540 +0.81690205774055 +0.24296072470632 +0.43711577893629 +0.43157526807752 +0.17399287996012 +0.13844320634899 +0.01547680655846 +0.39881774502858 +0.40771913173368 +0.27326264828934 +0.19060341611863 +0.90704563761546 +0.18613584195212 +0.22757469625008 +0.84736639858476 +0.17336967002616 +0.89232890977906 +0.82720750173978 +0.15351595803650 +0.67301807185670 +0.31529863726934 +0.64544221588972 +0.15977581883501 +0.31881798743326 +0.32548143473083 +0.57093210852830 +0.50715277844260 +0.02849441721621 +0.91495976294511 +0.71856031716435 +0.67198776080900 +0.81056231844221 +0.87440573539069 +0.71962515097232 +0.50307642557387 +0.76265845836830 +0.74918889615765 +0.49018047724802 +0.43587403133788 +0.79601624747205 +0.57226606366110 +0.23858735332484 +0.03031094086757 +0.15539026983738 +0.70912999286214 +0.96987113750414 +0.37023441976761 +0.19344196090348 +0.92144700477822 +0.75335399065430 +0.24614770608711 +0.16678737707181 +0.67387963017395 +0.86867710107548 +0.58706933692789 +0.60312554329572 +0.74118742840657 +0.61037453618362 +0.42327348411580 +0.72752437308678 +0.97758070581347 +0.54745935819843 +0.37808773617863 +0.59185225382694 +0.81967621520487 +0.94566229236244 +0.11244417310728 +0.47349383068317 +0.83777050899133 +0.51336444911024 +0.98975442884257 +0.27760064812326 +0.43215096619470 +0.01465744004170 +0.53535622021238 +0.02089496744830 +0.54073044259555 +0.68988816248347 +0.00477464521735 +0.77723224926727 +0.95596283833187 +0.62202522856195 +0.24710812225554 +0.22469906377002 +0.15572557557707 +0.16096609432528 +0.21580851895023 +1428368087 +1665524327 +1270317232 +1824115955 +512254602 +86349257 +726836169 +648218954 +1771285379 +1867253637 +1683712352 +1400185219 +1356940758 +1601759171 +1230636265 +1723299111 +172261367 +222986213 +969005022 +1011396380 +613710413 +1507530575 +461592300 +1799438731 +1263949021 +1737379567 +494813349 +971176659 +1805179369 +221345750 +1213262015 +1245539906 +823537597 +1763950955 +465969841 +1499397093 +212889760 +1932650612 +1665101351 +1718191066 +808552057 +139497366 +1584233128 +1792285903 +808611697 +1696608109 +591966004 +1245736921 +73591053 +288262780 +1883502475 +914479277 +1494647081 +427607079 +348451535 +1093170849 +976601775 +125583541 +1166593425 +1908382582 +1556307350 +1150847972 +1648718153 +92193637 +670730606 +1259013175 +430814400 +1483442407 +805308247 +1214921890 +912203341 +1669106275 +1928506533 +2139676987 +2032324070 +1939910549 +1755561975 +615917460 +1665791258 +551708917 +773804186 +295972610 +768536204 +840207220 +2124308057 +2105110470 +811894388 +1207833177 +721678025 +1090543742 +1727120188 +1107646163 +1186884834 +1825003313 +2134870661 +183116896 +956515367 +45148199 +1236293287 +1934801264 +1890181208 +66493912 +946242452 +623571602 +2114909637 +1026151105 +1175233941 +1808259128 +290876938 +1920460040 +398050799 +558695992 +1370603791 +69915127 +433963956 +1763268462 +1082755345 +1154379662 +1382592565 +1865474156 +1993554219 +2065273719 +1915537838 +2065403559 +813521382 +880532525 +922251345 +1670472148 +2063148946 +467652340 +1838888164 +180543021 +1661153355 +2109542934 +2116375730 +114052042 +1356969801 +300084364 +2063237281 +781410148 +2111805687 +1646975985 +1917610835 +1775597477 +1844495938 +1732012163 +378420045 +632659781 +665549512 +1434901869 +1344404273 +1971277308 +290254454 +1083372102 +895084232 +729814190 +624854114 +899912958 +257245571 +740331159 +307398963 +1146378559 +564320757 +1024779462 +1722493988 +629853638 +1467242619 +1123333445 +674786328 +1945686069 +1038818467 +1377383964 +1508592143 +1591781294 +751309967 +1287962425 +2024796058 +80440979 +1589263475 +218971170 +26882841 +2060952703 +2062276123 +1949546003 +452184916 +693844543 +286574064 +2079184783 +883182482 +1285429140 +1358476124 +1681488844 +423007346 +594894998 +236446631 +1270172052 +392193194 +2057970022 +1389147619 +1613926128 +1344404273 +1971277308 +290254454 +1083372102 +895084232 +729814190 +624854114 +899912958 +257245571 +740331159 +307398963 +1146378559 +564320757 +1024779462 +1722493988 +629853638 +1467242619 +1123333445 +674786328 +1945686069 +1038818467 +1377383964 +1508592143 +1591781294 +751309967 +1287962425 +2024796058 +80440979 +1589263475 +218971170 +26882841 +2060952703 +2062276123 +1949546003 +452184916 +693844543 +286574064 +2079184783 +883182482 +1285429140 +1358476124 +1681488844 +423007346 +594894998 +236446631 +1270172052 +392193194 +2057970022 +1389147619 +1613926128 +1070502497 +185458557 +394571982 +625063792 +1202551232 +1106745477 +1922274594 +1933100968 +1849320089 +2115080830 +1867777732 +2130631723 +596072318 +1653803768 +727441528 +1679567064 +199180016 +1759301942 +1362247603 +843443807 +2078602027 +1855953608 +248916061 +853446759 +55795458 +653874832 +60710992 +1588551358 +1066619885 +2096944326 +1459833265 +2067889981 +1180737744 +14153581 +1877497599 +1864031763 +288585453 +1490975114 +137051711 +1973393940 +1973776514 +238811539 +307692916 +1759733375 +1381965177 +1608191452 +865161446 +1908119138 +1935244809 +1454271467 diff -urN sprng5.orig/check/mlfg/mlfg.other.data sprng5/check/mlfg/mlfg.other.data --- sprng5.orig/check/mlfg/mlfg.other.data 1970-01-01 00:00:00.000000000 +0000 +++ sprng5/check/mlfg/mlfg.other.data 2014-06-17 15:09:52.000000000 +0000 @@ -0,0 +1,1800 @@ +1479592390 +400887705 +1040493538 +1265058804 +769363005 +421277251 +932166349 +450902356 +1029425901 +900326238 +497392476 +1514374107 +467603155 +102597076 +1402703629 +1640901326 +1729708475 +253896737 +890744115 +1413293551 +195470254 +731400149 +635754856 +1135622914 +2116101375 +1207958628 +1048773999 +533224416 +1783933364 +1069377032 +282068853 +1301322252 +1142678914 +1080940249 +634768786 +551735117 +1357583794 +794181935 +444257450 +392936031 +1602380176 +1013726377 +341595908 +1191376433 +944803925 +24239601 +713858690 +2057623794 +1716700195 +899258752 +975464505 +1753253499 +139930507 +597733504 +604506895 +1402326973 +712035993 +171625679 +600788209 +1444427328 +1547795930 +1078400464 +1867472852 +280990064 +811726254 +157778254 +820188763 +709446781 +862183494 +440101858 +315845944 +1558084640 +426249196 +1702958909 +978854151 +998835672 +1461277721 +2041920424 +2006877256 +186801195 +558791815 +2060886137 +1641432522 +2123159983 +791676984 +1833792251 +360219039 +1338017349 +1472217997 +547164146 +653120174 +1223831034 +1249034152 +1938874780 +556939932 +1438070391 +1538041612 +576170163 +590974348 +1697288476 +1156973706 +506745635 +1003874891 +1892991309 +1906993259 +1870329109 +212365321 +258788736 +65103646 +740461238 +1459630964 +1623151653 +1727656421 +991988946 +1542965781 +1144869310 +255130065 +1118860450 +557598993 +1330228411 +1213522106 +231926045 +378897595 +1721744056 +1105231787 +1904166780 +1280622350 +1493397169 +1202643016 +837093238 +71971675 +151049523 +1331408212 +2088759196 +942612908 +1068485569 +2066369055 +1477939633 +94545171 +1636931995 +521099612 +2144156113 +815980232 +964233035 +1843278369 +196187815 +423281740 +2032230745 +624456069 +1589181218 +56503630 +145449295 +554586586 +1673933113 +1287110625 +422533850 +1836587978 +929874167 +420229329 +166379842 +1995162903 +1433884728 +1491313745 +25672326 +1950538526 +1037097897 +61386101 +1550686280 +1501592923 +1142942159 +600290540 +1545023276 +172391556 +1364797429 +1868150767 +1487743920 +1604978597 +780916924 +1091645028 +1387221981 +651779219 +214549038 +1989764002 +1751461710 +1841205666 +688192365 +184572915 +169564183 +636654288 +559430259 +229871618 +1624587181 +932366538 +1336180199 +1973588720 +486955602 +2099200145 +1348355598 +138298841 +2081534641 +906408332 +474269170 +581609504 +2026261507 +1523336333 +1365214220 +1593669467 +633312460 +534204502 +544080195 +1978535384 +998786168 +314105974 +1012159832 +925473505 +1857615718 +149441585 +185145916 +222548712 +214901249 +1791082863 +1156326382 +44156030 +1253848688 +648308961 +1288282789 +153202450 +1772907931 +1503707335 +1308809522 +1469723844 +651728408 +1385217084 +1688153643 +883416071 +1981825721 +935497252 +1377380853 +1983544873 +1286859818 +1585767728 +1531475878 +882078648 +415333362 +1395847242 +1474523846 +1025279620 +1453526478 +1944572365 +575609910 +1664645562 +765564688 +264128408 +369303556 +803746731 +569818854 +925400572 +2004712689 +992000489 +3722056 +116215218 +1740813495 +101125105 +980730455 +120627024 +1214721491 +682185178 +1068469270 +884987585 +1840942807 +1737137317 +1816085293 +903421023 +397377405 +1125288424 +2013661749 +1368861197 +1731290227 +2134454247 +1711480582 +1031810358 +1392566074 +2107207741 +624542422 +1564680160 +1472392593 +1091602407 +987533462 +1430673651 +2011825288 +184877995 +2023363496 +893571685 +247862721 +1016623317 +1682186264 +847908985 +1228631240 +785973376 +1997687835 +756013926 +784070453 +191364269 +552318611 +1333547364 +228787672 +1973343505 +644963710 +605063279 +341291299 +734289559 +1524853832 +427404378 +1681274255 +428472254 +1017778224 +1178654103 +344529740 +1582995971 +330199032 +1876961777 +996288409 +157077643 +1340629876 +1769997978 +71594890 +1218062566 +806603956 +2138222332 +1308932407 +563298890 +798159568 +2014494904 +742739157 +1047753722 +953156701 +50340272 +1178497303 +380073006 +1526319734 +680697446 +380667800 +1315157242 +537460065 +500233660 +2061892812 +1366442105 +1935012331 +1481417693 +1111010588 +1230471380 +1583051758 +1080935888 +397183155 +607363434 +1149118437 +1399647706 +1094739923 +671401034 +1781976193 +1166598850 +1207679567 +1755723017 +2111472309 +693052287 +1848118062 +1905561569 +2020746841 +1077011262 +1130929152 +382320128 +912786744 +122258886 +1578487775 +1960179416 +977022306 +652867489 +418847621 +1236707875 +2030308928 +1722084063 +1585588025 +1662179997 +1005427071 +630649413 +1679305527 +1829360460 +521204301 +1170384730 +1364210546 +1403762658 +438940872 +1454250674 +929251403 +193839673 +805148995 +1936099367 +2030553683 +660153960 +1024915489 +335075343 +1815210300 +4003820 +1072220302 +803990184 +404496852 +259050047 +568574832 +1450139353 +388103239 +844992516 +1562545362 +209552964 +2109297470 +357474685 +308918504 +482165576 +176202981 +849589401 +1909939244 +1398586071 +761301020 +94066398 +914163170 +1162457152 +524373095 +111670500 +1406645666 +1520638422 +179973084 +577704753 +567369867 +492498576 +477707884 +422504232 +1189043798 +2122200284 +413787188 +1299927542 +2001649971 +1623425641 +259617478 +782354286 +1441777067 +1189780966 +832861494 +1922663578 +489493594 +159925960 +549606004 +694951328 +1266591662 +1905655810 +1260404919 +198058865 +1598311509 +1515193841 +1178362594 +804236617 +1539374093 +608223606 +1272398495 +896831742 +1452624622 +1415842864 +18984058 +1269874372 +309254423 +1197187450 +1134726181 +1337381665 +986418074 +481854487 +255315766 +1250286757 +1619514543 +1291095180 +750922653 +1171572482 +597207435 +67722646 +1736087138 +1134330875 +682380070 +1019543188 +1748022154 +274802574 +1658557815 +1218129743 +59760849 +1330060215 +921595624 +1487337391 +1924150298 +1043422798 +448582813 +864709837 +1200776427 +1568167931 +289297737 +0.998205 +0.956935 +0.371610 +0.762515 +0.436362 +0.019143 +0.811395 +0.374120 +0.499913 +0.985215 +0.722624 +0.046144 +0.066780 +0.665696 +0.915794 +0.256873 +0.479638 +0.232819 +0.758608 +0.737500 +0.031275 +0.744219 +0.107267 +0.489566 +0.821224 +0.834118 +0.256182 +0.119493 +0.065291 +0.628854 +0.368258 +0.153621 +0.071111 +0.177034 +0.143429 +0.698935 +0.979219 +0.016459 +0.673069 +0.016057 +0.410859 +0.578348 +0.664259 +0.158482 +0.458950 +0.525902 +0.550917 +0.404576 +0.002026 +0.130242 +0.879852 +0.230896 +0.946384 +0.569865 +0.326170 +0.778187 +0.146863 +0.016558 +0.725336 +0.288450 +0.764894 +0.780762 +0.656779 +0.092216 +0.793757 +0.487608 +0.257837 +0.488781 +0.149146 +0.669914 +0.001489 +0.288133 +0.555481 +0.321171 +0.718555 +0.990359 +0.301558 +0.591527 +0.149264 +0.567102 +0.018052 +0.395003 +0.136582 +0.542215 +0.718118 +0.449781 +0.273951 +0.036165 +0.292450 +0.618658 +0.609486 +0.617456 +0.577555 +0.622264 +0.278303 +0.715745 +0.582708 +0.769150 +0.231852 +0.025023 +0.077338 +0.949034 +0.951913 +0.038506 +0.644418 +0.199632 +0.635619 +0.964239 +0.108352 +0.871435 +0.291971 +0.814780 +0.256090 +0.756134 +0.247932 +0.580847 +0.263067 +0.989678 +0.755556 +0.763647 +0.526426 +0.248962 +0.987128 +0.256166 +0.940098 +0.018436 +0.736089 +0.791358 +0.428726 +0.353863 +0.255370 +0.968766 +0.530266 +0.021746 +0.258345 +0.168888 +0.026535 +0.587460 +0.452756 +0.546052 +0.543885 +0.273066 +0.418372 +0.856860 +0.452977 +0.910723 +0.400482 +0.844323 +0.541465 +0.779143 +0.144615 +0.600527 +0.898527 +0.636296 +0.816247 +0.860969 +0.287909 +0.959946 +0.836343 +0.244884 +0.489609 +0.917976 +0.284893 +0.426013 +0.918815 +0.248499 +0.639643 +0.651506 +0.199583 +0.375159 +0.434056 +0.256600 +0.694628 +0.903979 +0.616020 +0.736798 +0.816417 +0.983880 +0.414459 +0.302109 +0.391162 +0.699490 +0.921250 +0.886555 +0.903781 +0.169144 +0.713668 +0.964771 +0.798418 +0.269518 +0.770560 +0.531808 +0.897859 +0.394531 +0.213066 +0.447570 +0.434114 +0.426460 +0.344461 +0.899396 +0.170898 +0.368983 +0.237487 +0.598636 +0.293963 +0.033741 +0.206195 +0.693094 +0.915103 +0.837101 +0.413478 +0.053292 +0.724295 +0.947814 +0.815320 +0.391652 +0.277518 +0.624189 +0.059760 +0.278338 +0.845664 +0.363976 +0.286371 +0.208014 +0.677825 +0.025906 +0.367672 +0.646392 +0.024433 +0.409118 +0.526730 +0.243991 +0.822371 +0.042231 +0.197614 +0.802833 +0.905236 +0.912751 +0.610020 +0.101178 +0.261922 +0.121618 +0.340466 +0.524426 +0.645806 +0.936055 +0.478676 +0.722984 +0.125466 +0.800347 +0.129849 +0.318480 +0.601121 +0.579589 +0.528000 +0.128708 +0.937106 +0.697985 +0.974214 +0.560673 +0.091105 +0.924714 +0.677396 +0.926323 +0.209025 +0.654194 +0.302125 +0.287869 +0.291216 +0.596978 +0.047842 +0.426179 +0.099754 +0.487801 +0.886903 +0.655554 +0.943149 +0.309006 +0.922605 +0.444814 +0.536254 +0.185291 +0.035567 +0.774329 +0.927604 +0.492154 +0.222006 +0.326314 +0.522378 +0.363619 +0.380854 +0.979890 +0.636134 +0.907489 +0.976134 +0.019335 +0.996905 +0.938144 +0.818545 +0.873900 +0.400084 +0.911575 +0.120851 +0.967703 +0.878178 +0.598871 +0.660644 +0.622245 +0.583428 +0.800388 +0.877120 +0.041231 +0.513953 +0.136413 +0.443901 +0.852292 +0.699613 +0.800019 +0.439723 +0.145976 +0.211117 +0.629279 +0.281111 +0.882540 +0.085172 +0.630192 +0.498508 +0.664420 +0.540131 +0.595225 +0.339431 +0.967704 +0.524486 +0.914958 +0.762400 +0.026111 +0.865797 +0.775479 +0.285351 +0.803662 +0.043712 +0.005671 +0.841956 +0.244604 +0.976018 +0.121712 +0.500567 +0.240331 +0.942249 +0.895756 +0.329581 +0.245447 +0.597272 +0.013739 +0.502473 +0.258401 +0.760045 +0.967144 +0.693425 +0.879629 +0.610318 +0.213941 +0.856039 +0.349233 +0.864209 +0.806626 +0.982050 +0.823519 +0.963242 +0.930634 +0.915217 +0.513663 +0.833168 +0.958342 +0.012606 +0.641603 +0.995151 +0.022324 +0.311416 +0.273694 +0.492060 +0.837339 +0.740805 +0.654606 +0.602852 +0.715779 +0.327409 +0.930570 +0.079322 +0.825642 +0.413422 +0.111239 +0.058745 +0.963758 +0.012090 +0.295045 +0.505649 +0.627871 +0.758681 +0.583320 +0.224103 +0.356166 +0.490404 +0.247047 +0.918394 +0.971251 +0.890531 +0.926336 +0.328512 +0.234239 +0.924757 +0.179540 +0.946404 +0.167256 +0.420269 +0.590096 +0.491608 +0.095472 +0.752942 +0.343705 +0.388588 +0.474846 +0.523703 +0.044774 +0.370362 +0.740116 +0.718227 +0.581804 +0.801553 +0.688312 +0.374708 +0.821075 +0.613002 +0.489801 +0.540510 +0.243769 +0.657570 +0.526333 +0.731429 +0.855915 +0.365528 +0.387596 +0.086928 +0.750037 +0.854258 +0.074033 +0.631819 +0.778000 +0.359305 +0.227073 +0.449621 +0.258706 +0.149064 +0.965846 +0.889814 +0.168339 +0.407718 +0.736552 +0.395252 +0.114041 +0.596430 +0.970437 +0.416088 +0.974542 +0.252051 +0.960625 +0.340323 +0.899128 +0.320889 +0.848664 +0.716187 +0.136291 +0.875715 +0.165736 +0.480501 +0.349938 +0.507887 +0.638744 +0.599216 +0.421602 +0.712778 +0.617678 +0.798719 +0.307057 +0.810032 +0.535590 +0.163422 +0.189424 +0.732748 +0.931416 +0.934642 +0.692611 +0.521670 +0.976660 +0.703737 +0.586448 +0.812751 +0.752173 +0.480310 +0.787476 +0.66707682754441 +0.43670142195167 +0.56645521883267 +0.53408369911455 +0.34482018044668 +0.31652690370551 +0.75517067452860 +0.45300084248869 +0.33778688953221 +0.67209304679213 +0.46671783842377 +0.66259152963123 +0.01699590672049 +0.87925433182299 +0.69188450559362 +0.66779152513367 +0.96378923184650 +0.17962093658776 +0.95238497875678 +0.74627539187575 +0.22346889824725 +0.62852866289457 +0.21910478352556 +0.20867131224550 +0.06155872431448 +0.35657012481090 +0.10739150985387 +0.06638033105414 +0.50449401660477 +0.62881694251570 +0.48127344748763 +0.94856202870789 +0.80005643344980 +0.63433189653540 +0.69916830663025 +0.32911232337234 +0.80587652813523 +0.96300132600866 +0.86252611018656 +0.68978662621525 +0.20096781231689 +0.63876251642133 +0.88422582440667 +0.21011147974345 +0.66895323870871 +0.41403953910235 +0.14074915093113 +0.45997389615835 +0.69700543956045 +0.12492363465322 +0.74607995037758 +0.06221785424712 +0.02084791633721 +0.53944789206015 +0.08967209041199 +0.57014099144787 +0.03779209757307 +0.93166428068532 +0.27088544504549 +0.71896214543780 +0.23171961851796 +0.26206623061649 +0.79773318330927 +0.22284386118363 +0.87258541128883 +0.72610829123422 +0.26618660541790 +0.49921282371595 +0.99657649208531 +0.82726094046318 +0.65472081726931 +0.97181939335282 +0.30934330531417 +0.36042289399654 +0.55036800599586 +0.57964420962000 +0.01246071809742 +0.88627285697303 +0.04801530649934 +0.33909040774559 +0.79500742837331 +0.65839516723810 +0.71469343570742 +0.69806976425468 +0.64916241019781 +0.24457430085246 +0.73536590345774 +0.29003670710231 +0.50049856407797 +0.32641080266478 +0.31684038840911 +0.33651204989570 +0.68846557277559 +0.27644593103857 +0.24516328251982 +0.33353133680944 +0.08509924984171 +0.44881998839320 +0.15586331168693 +0.80664302085516 +0.52296465915073 +0.75709452746990 +0.08563740386389 +0.85917421244818 +0.50463377931945 +0.34675350093347 +0.61906668740917 +0.61378953136048 +0.25652865941527 +0.68411273766380 +0.04332471839323 +0.55331145854461 +0.25396372633300 +0.37206253374193 +0.20823823021041 +0.76418555588778 +0.37269720281050 +0.15712700912768 +0.45914466484685 +0.93864551092154 +0.36271143329343 +0.52340057509897 +0.86026447092796 +0.33656100312910 +0.22858719212171 +0.84279743343383 +0.03548690347994 +0.51768219627226 +0.41004489346959 +0.79748284309100 +0.87899907794547 +0.20272961663145 +0.69380929576283 +0.26559889710446 +0.20003608565342 +0.43472179980206 +0.65311675488312 +0.64790294493621 +0.26372814842328 +0.20671151195699 +0.27358482219935 +0.00751042736980 +0.86458955854952 +0.23405137499808 +0.17799032812763 +0.62707335613358 +0.33019348421209 +0.66418943249386 +0.82815404270131 +0.12806832970229 +0.71360930136537 +0.15703923185854 +0.15996150517220 +0.47185004838974 +0.70182011572814 +0.85097583929742 +0.33574257238013 +0.21945548302139 +0.88996728125244 +0.26176499077587 +0.91333136045279 +0.19108794111203 +0.12458590264380 +0.86884485394596 +0.65729438626171 +0.98558709742766 +0.68398308590939 +0.54396600516259 +0.70696355694135 +0.59860690163410 +0.21028939182566 +0.91613768530596 +0.07918899699830 +0.40328719274037 +0.44011797073979 +0.79539809912375 +0.50800250615169 +0.66455091031377 +0.38807567615874 +0.79698925801870 +0.70847705649232 +0.54915242164691 +0.97790425797076 +0.52200508502212 +0.91093084725844 +0.35450121557906 +0.80850137471968 +0.98595183243986 +0.76187570739637 +0.67233248572340 +0.41091429212289 +0.11883047616137 +0.46900907616483 +0.79948524093832 +0.86200107493134 +0.73045082998953 +0.84381668761388 +0.94146692242353 +0.58308558664078 +0.53950825531963 +0.29898133021268 +0.39003970204974 +0.28551322621566 +0.03866210028434 +0.11702211097987 +0.55895752134364 +0.62258630670855 +0.18222361361407 +0.94061355914180 +0.64864456580546 +0.94168077351806 +0.02983071947857 +0.70759677866605 +0.28658716078875 +0.23594758146864 +0.11241765375836 +0.80235161928622 +0.45318390403250 +0.56976557293665 +0.38236562699159 +0.99999612451006 +0.99229086263792 +0.36764628425793 +0.28161359878830 +0.61878736839957 +0.47354480288347 +0.54075522850625 +0.19696681299825 +0.98617879409507 +0.30388298313849 +0.70995497025748 +0.92307242751514 +0.73639445865720 +0.72587815123612 +0.68788070568693 +0.74206799395073 +0.43511798069132 +0.17089268850060 +0.37532997052567 +0.73472314188609 +0.85618981743408 +0.23725809963981 +0.49120960280093 +0.14706546307850 +0.60182153682623 +0.87671069117582 +0.04473499349400 +0.16244547842406 +0.04211678988415 +0.29807710256149 +0.00107930545142 +0.06766165569313 +0.31435686905174 +0.25520803701138 +0.48983868387348 +0.94187844534931 +0.88001363529777 +0.94669837062158 +0.15533739418443 +0.45323790727144 +0.51290092956307 +0.44847433562220 +0.02140264210172 +0.15630767719577 +0.86044311769900 +0.17559796316735 +0.13175102039317 +0.48018204748956 +0.98771102872480 +0.41899646466337 +0.57129380867374 +0.17893041811889 +0.18967996864111 +0.55218721553259 +0.62023488789449 +0.80916925737564 +0.59360518373791 +0.40028727450593 +0.91710445560819 +0.56976888377593 +0.81159836319503 +0.80575619477458 +0.61289833861667 +0.87709624219579 +0.08754286588931 +0.10018329432392 +0.07843914335774 +0.45078336453720 +0.61466298905540 +0.62008152831281 +0.34091300815601 +0.74957804633591 +0.21823872539742 +0.84865892498356 +0.83468696928555 +0.35757486341397 +0.18909585745148 +0.36047190805376 +0.74793949015339 +0.12496447636262 +0.41631253597594 +0.06168852543626 +0.88406715968314 +0.55789805815970 +0.22764052778309 +0.38093143189470 +0.28659670625261 +0.66169034780781 +0.33349910681214 +0.00247879690264 +0.53206685754328 +0.34277232617815 +0.24077247445346 +0.52130518971696 +0.31690103698101 +0.68863562121243 +0.33635459653690 +0.60922781553320 +0.02506872539119 +0.67598365357095 +0.73419497186379 +0.65581392810606 +0.14944149848016 +0.67575067449460 +0.65013851618376 +0.54641106252886 +0.01427137716044 +0.58686597084429 +0.96032822886257 +0.20659414041577 +0.47921214549125 +0.31681990690629 +0.99270716889619 +0.18190546835945 +0.97214191365411 +0.79079892610870 +0.25886359515349 +0.97875019529459 +0.97380590453067 +0.60718457208527 +0.68678375683778 +0.48752908855866 +0.64656203747366 +0.63049151283347 +0.49970772726916 +0.14327813303035 +0.70277839747038 +0.62225670317306 +0.37167593529117 +0.15109001230160 +0.24895833975093 +0.78426004231119 +0.88457792646492 +0.31854655548182 +0.64149304819267 +0.89335117432318 +0.35502496856858 +0.42733568902244 +0.57007062542825 +0.00919063946116 +0.62300154585319 +0.92993939055221 +0.66761175620262 +0.12917363886286 +0.32132563679970 +0.80824923825512 +0.38507927949566 +0.28331030568599 +0.64183508323654 +0.67940977859476 +0.82681695568424 +0.09657383982305 +0.82549603486606 +0.19383729312704 +0.69939007754886 +0.08589514275225 +0.76011288739000 +0.88981808138101 +0.69632472573335 +0.66515145015357 +0.84131150807540 +0.84018346458432 +0.51208289678165 +0.51817154799097 +0.16129287078102 +0.69658915768344 +0.32254091541901 +0.37266833210475 +0.33543049388915 +0.77040581375174 +0.41271456789353 +0.31160727812996 +0.63754667178633 +0.07151208435725 +0.10112789111170 +0.86451906615495 +0.45196091319656 +0.71825244082051 +0.79782212575289 +0.37005277402506 +0.93542927679681 +0.46249993457317 +0.85041608175733 +0.06292647733768 +0.48141675075374 +0.47902887932002 +0.54490612011356 +0.65776573766857 +0.22774864633350 +0.85616914421321 +0.41711320109365 +0.93659511836988 +0.30460424330078 +0.54420600288926 +0.51426979015314 +0.15170535911616 +0.49157885805067 +0.21727610156878 +0.97429552359056 +0.19854613668419 +0.77645154950717 +0.67786805694953 +0.27543842443902 +0.64580014572443 +0.92987039072280 +0.25864632579496 +0.26239829609823 +0.19211175322058 +0.20440734967767 +0.33186309644813 +0.38323947146284 +0.53571353463313 +0.06307918673434 +0.73630475380790 +0.22580971060458 +0.28535796223783 +0.86383611993736 +0.35268557797844 +0.19085509841494 +0.95186797529562 +0.50734774893903 +0.56899074902343 +0.69552115106600 +0.62135428215553 +0.36798100307879 +0.84816696791066 +0.86739608487791 +0.29921317753968 +0.91003685030742 +0.64739902367189 +0.24898048938103 +0.70818794159043 +0.90127604886670 +0.07705827536448 +0.78237334964088 +0.38208865726836 +0.38291106908472 +0.85150872553993 +0.31116424700736 +0.78073607774376 +0.02932542494809 +0.70614387018278 +0.91499002390368 +0.76863861591799 +0.22676892963869 +0.94064617177479 +0.38088542783609 +0.23171424421995 +0.99677410272065 +0.29238734907861 +0.70733802864552 +0.92483039135327 +0.09846023302220 +0.57004173367141 +0.91313418530187 +0.41429363297269 +0.25109866810243 +0.05294554629500 +0.70360457405017 +0.48940125648699 +0.32180464161190 +0.27046121241532 +0.88306425959198 +0.16648620752691 +0.54959042799151 +0.73925723913255 +0.75850946322481 +0.48171865432187 +0.32506611349735 +0.11952899412352 +0.45063237089665 +0.40274581162701 +0.71819344658394 +0.06722332286302 +0.48939555003478 +0.18053002458094 +0.64306721337170 +0.64203832975217 +0.12266818285040 +0.69096442645785 +1961593022 +2058123164 +304465401 +1596182158 +1317827193 +37312776 +1710348730 +321176464 +548892099 +374073910 +686123613 +824980045 +374560385 +898230183 +587356093 +653208534 +1717614279 +1798552902 +607067031 +311577143 +802144035 +1768240837 +667268521 +1300935595 +1320489242 +588779042 +424844546 +597998467 +2084640032 +1419226786 +1311969003 +2061391578 +1968303047 +649108449 +140663167 +1845945341 +1587583795 +1948400831 +904785550 +1460005325 +1185029470 +1621046861 +922274779 +895088647 +1318188395 +779630936 +1042195180 +1115622271 +357993515 +95351369 +1888523691 +502957515 +1121894322 +444358002 +1194554281 +565815714 +1259131080 +1835213294 +1178703369 +1367738957 +1721015722 +1638510758 +1398181812 +131111728 +754040484 +419105024 +1813243660 +1096106616 +1898515309 +1717316185 +1169927969 +1682797758 +1421531912 +32184556 +1576227289 +1965971987 +1435271145 +1959385169 +1595278458 +186639063 +1157825026 +121380000 +1844286330 +1401720290 +1734430958 +13982192 +217504713 +1327826769 +548718350 +1088227171 +320699184 +1826457792 +1355139154 +1858435884 +365057286 +1744972202 +580124221 +2112853481 +567666065 +1282428089 +1228708940 +424114392 +516600756 +1072297779 +161166897 +2055535810 +1483643640 +853505264 +1486864929 +7464951 +238673170 +18957402 +1351215569 +2065167307 +1885264559 +2038152168 +104196380 +1835450499 +893419649 +186618461 +842957567 +1689076273 +672071078 +1019322292 +626176346 +77538727 +1562591571 +1116250060 +552917176 +84479510 +348878344 +696362 +1557130422 +520575737 +1788839721 +1862713708 +917020369 +240806822 +1678044546 +448885613 +1103964674 +440632845 +1140255025 +2010811440 +2037053227 +1602150360 +1941326522 +1657240736 +284845518 +2067794723 +1479592390 +400887705 +1040493538 +1265058804 +769363005 +421277251 +932166349 +450902356 +1029425901 +900326238 +497392476 +1514374107 +467603155 +102597076 +1402703629 +1640901326 +1729708475 +253896737 +890744115 +1413293551 +195470254 +731400149 +635754856 +1135622914 +2116101375 +1207958628 +1048773999 +533224416 +1783933364 +1069377032 +282068853 +1301322252 +1142678914 +1080940249 +634768786 +551735117 +1357583794 +794181935 +444257450 +392936031 +1602380176 +1013726377 +341595908 +1191376433 +944803925 +24239601 +713858690 +2057623794 +1716700195 +899258752 +1479592390 +400887705 +1040493538 +1265058804 +769363005 +421277251 +932166349 +450902356 +1029425901 +900326238 +497392476 +1514374107 +467603155 +102597076 +1402703629 +1640901326 +1729708475 +253896737 +890744115 +1413293551 +195470254 +731400149 +635754856 +1135622914 +2116101375 +1207958628 +1048773999 +533224416 +1783933364 +1069377032 +282068853 +1301322252 +1142678914 +1080940249 +634768786 +551735117 +1357583794 +794181935 +444257450 +392936031 +1602380176 +1013726377 +341595908 +1191376433 +944803925 +24239601 +713858690 +2057623794 +1716700195 +899258752 +605086814 +1131528105 +1850285002 +157538708 +1693930696 +1861460523 +535597249 +1680931216 +60050938 +875439901 +847147123 +2034268809 +2071723302 +1480294277 +1543000361 +576588008 +328508648 +353998495 +1257696987 +1500891757 +833190009 +2038618810 +473850805 +2145409406 +265876274 +2023369184 +24742435 +1871473403 +1501135921 +2007608235 +2096968904 +1979289910 +669266309 +987358740 +362895445 +1444187483 +646632638 +1747229087 +463184332 +1350777785 +373136403 +1317013730 +1799881304 +716658397 +593429446 +784240049 +1469019488 +1994252882 +269783886 +1028253893 diff -urN sprng5.orig/check/pmlcg/F77/Makefile.am sprng5/check/pmlcg/F77/Makefile.am --- sprng5.orig/check/pmlcg/F77/Makefile.am 2018-07-21 16:06:18.000000000 +0000 +++ sprng5/check/pmlcg/F77/Makefile.am 2021-06-08 16:49:25.000000000 +0000 @@ -13,16 +13,16 @@ check_fpmlcg_SOURCES = check_genf.F check_fpmlcg_DEPENDENCIES = $(LIBDIR)/libsprng.a check_fpmlcg_FFLAGS = $(FFPSIZE) -I$(INCLUDEDIR) -check_fpmlcg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ +check_fpmlcg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ $(MPI_CXXLIB) check_fpmlcg_LDFLAGS = check_sim_fpmlcg_SOURCES = check_genf_simple.F check_sim_fpmlcg_DEPENDENCIES = $(LIBDIR)/libsprng.a -check_sim_fpmlcg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ +check_sim_fpmlcg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ $(MPI_CXXLIB) check_sim_fpmlcg_FFLAGS = $(FFPSIZE) -I$(INCLUDEDIR) check_sim_fpmlcg_LDFLAGS = time_fpmlcg_SOURCES = timingf.F time_fpmlcg_DEPENDENCIES = $(LIBDIR)/libsprng.a -time_fpmlcg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ +time_fpmlcg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ $(MPI_CXXLIB) time_fpmlcg_FFLAGS = $(FFPSIZE) -I$(INCLUDEDIR) time_fpmlcg_LDFLAGS = diff -urN sprng5.orig/check/pmlcg/F77/Makefile.in sprng5/check/pmlcg/F77/Makefile.in --- sprng5.orig/check/pmlcg/F77/Makefile.in 2018-07-21 19:48:27.000000000 +0000 +++ sprng5/check/pmlcg/F77/Makefile.in 2021-06-08 16:52:40.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -108,6 +108,7 @@ PROGRAMS = $(bin_PROGRAMS) am_check_fpmlcg_OBJECTS = check_fpmlcg-check_genf.$(OBJEXT) check_fpmlcg_OBJECTS = $(am_check_fpmlcg_OBJECTS) +am__DEPENDENCIES_1 = check_fpmlcg_LINK = $(F77LD) $(check_fpmlcg_FFLAGS) $(FFLAGS) \ $(check_fpmlcg_LDFLAGS) $(LDFLAGS) -o $@ am_check_sim_fpmlcg_OBJECTS = \ @@ -293,6 +294,7 @@ MKDIR_P = @MKDIR_P@ MPICXX = @MPICXX@ MPIF77 = @MPIF77@ +MPI_CXXLIB = @MPI_CXXLIB@ MPI_DEF = @MPI_DEF@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ @@ -377,16 +379,16 @@ check_fpmlcg_SOURCES = check_genf.F check_fpmlcg_DEPENDENCIES = $(LIBDIR)/libsprng.a check_fpmlcg_FFLAGS = $(FFPSIZE) -I$(INCLUDEDIR) -check_fpmlcg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ +check_fpmlcg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ $(MPI_CXXLIB) check_fpmlcg_LDFLAGS = check_sim_fpmlcg_SOURCES = check_genf_simple.F check_sim_fpmlcg_DEPENDENCIES = $(LIBDIR)/libsprng.a -check_sim_fpmlcg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ +check_sim_fpmlcg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ $(MPI_CXXLIB) check_sim_fpmlcg_FFLAGS = $(FFPSIZE) -I$(INCLUDEDIR) check_sim_fpmlcg_LDFLAGS = time_fpmlcg_SOURCES = timingf.F time_fpmlcg_DEPENDENCIES = $(LIBDIR)/libsprng.a -time_fpmlcg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ +time_fpmlcg_LDADD = -L$(LIBDIR) -lsprng -lstdc++ $(MPI_CXXLIB) time_fpmlcg_FFLAGS = $(FFPSIZE) -I$(INCLUDEDIR) time_fpmlcg_LDFLAGS = bin_SCRIPTS = checkpmlcg timepmlcg diff -urN sprng5.orig/check/pmlcg/Makefile.in sprng5/check/pmlcg/Makefile.in --- sprng5.orig/check/pmlcg/Makefile.in 2018-07-21 20:57:22.000000000 +0000 +++ sprng5/check/pmlcg/Makefile.in 2021-06-08 16:40:22.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -297,6 +297,7 @@ MKDIR_P = @MKDIR_P@ MPICXX = @MPICXX@ MPIF77 = @MPIF77@ +MPI_CXXLIB = @MPI_CXXLIB@ MPI_DEF = @MPI_DEF@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ diff -urN sprng5.orig/configure sprng5/configure --- sprng5.orig/configure 2018-07-21 19:48:25.000000000 +0000 +++ sprng5/configure 2021-06-08 16:40:23.000000000 +0000 @@ -634,6 +634,7 @@ USE_TESTU01_TRUE TESTU01_INCDIR TESTU01_LIBDIR +MPI_CXXLIB MPI_DEF USE_MPI_FALSE USE_MPI_TRUE @@ -3397,7 +3398,7 @@ if test "${with_fortran+set}" = set; then : withval=$with_fortran; with_fortran=$withval else - with_fortran=yes + with_fortran=no fi @@ -6529,9 +6530,12 @@ if test $use_mpi = y; then MPI_DEF="-DSPRNG_MPI" + MPI_CXXLIB="-lmpi_cxx" else MPI_DEF="" + MPI_CXXLIB="" fi + diff -urN sprng5.orig/configure.ac sprng5/configure.ac --- sprng5.orig/configure.ac 2018-07-21 16:22:12.000000000 +0000 +++ sprng5/configure.ac 2021-06-08 16:37:02.000000000 +0000 @@ -25,7 +25,7 @@ AC_CONFIG_LINKS([check/pmlcg/F77/pmlcg.data:check/pmlcg/F77/pmlcg.data]) AC_ARG_WITH(fortran, [AC_HELP_STRING([--with-fortran],[enable fortran compilation])], - with_fortran=$withval, with_fortran=yes) + with_fortran=$withval, with_fortran=no) AC_ARG_WITH(mpi, [AC_HELP_STRING([--with-mpi],[enable MPI parallelization])], with_mpi=$withval, with_mpi=no) @@ -89,11 +89,14 @@ if test $use_mpi = y; then MPI_DEF="-DSPRNG_MPI" + MPI_CXXLIB="-lmpi_cxx" else MPI_DEF="" + MPI_CXXLIB="" fi AC_SUBST(MPI_DEF) +AC_SUBST(MPI_CXXLIB) AC_ARG_WITH(testu01, [AC_HELP_STRING([--with-testu01], [path to testU01])], with_testu01=$withval, with_testu01=no) diff -urN sprng5.orig/include/Makefile.in sprng5/include/Makefile.in --- sprng5.orig/include/Makefile.in 2018-07-21 19:48:27.000000000 +0000 +++ sprng5/include/Makefile.in 2021-06-08 16:40:22.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -215,6 +215,7 @@ MKDIR_P = @MKDIR_P@ MPICXX = @MPICXX@ MPIF77 = @MPIF77@ +MPI_CXXLIB = @MPI_CXXLIB@ MPI_DEF = @MPI_DEF@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ diff -urN sprng5.orig/include/bignum.h sprng5/include/bignum.h --- sprng5.orig/include/bignum.h 2014-08-25 17:51:26.000000000 +0000 +++ sprng5/include/bignum.h 2021-05-18 00:01:38.000000000 +0000 @@ -1,145 +1,143 @@ #if __GNUC__ > 3 #include #else - #include +#include #endif - -#ifndef BIGNUM_H -#define BIGNUM_H - - -class BigNum -{ - friend BigNum Set_ui (unsigned long int); - friend BigNum Set_si (signed long int); - - friend BigNum operator + (const BigNum &, const BigNum &); - friend BigNum operator + (const BigNum &, const unsigned long int); - friend BigNum operator - (const BigNum &, const BigNum &); - friend BigNum Sub4Div (const BigNum &, const BigNum &); - friend BigNum operator - (const BigNum &, const unsigned long int); - friend BigNum operator * (const BigNum &, const BigNum &); - friend BigNum operator * (const BigNum &, const unsigned long int); - friend BigNum operator / (const BigNum &, const BigNum &); - friend BigNum operator / (const BigNum &, const unsigned long int); - friend BigNum operator % (const BigNum &, const BigNum &); - friend BigNum operator % (const BigNum &, const unsigned long int); - friend BigNum operator ^ (const BigNum &, const BigNum &); - friend BigNum operator ^ (const BigNum &, const unsigned long int); - friend unsigned long int operator & (const BigNum &, const unsigned long int); - friend BigNum operator >> (BigNum &, unsigned long int); - friend BigNum operator << (BigNum &, unsigned long int); - friend BigNum b_div_2exp (const BigNum &, const unsigned long int); - friend BigNum b_pow (const BigNum &, const unsigned long int); - friend BigNum b_powm (const BigNum &, const BigNum &, const BigNum &); - friend BigNum b_powm (const BigNum &, const unsigned int, const BigNum &); - friend BigNum b_abs(const BigNum &); - friend BigNum b_abs2(const BigNum &); - friend BigNum b_neg(const BigNum &); - friend std::ostream& operator << (std::ostream &, const BigNum &); - - friend bool operator == (const BigNum &, const BigNum &); - friend bool operator == (const BigNum &, const unsigned long int); - friend int b_cmp (const BigNum &, const BigNum &); - friend int b_cmp (const BigNum &, const unsigned long int); - friend int b_cmp (const BigNum &, const signed long int); - - friend unsigned long int SmallerSize (const BigNum &, const BigNum &); - friend unsigned long int BiggerSize (const BigNum &, const BigNum &); - friend int Test (const unsigned long int, int); - friend unsigned long int Set (const unsigned long int, int); - friend unsigned long int Unset (const unsigned long int, int); - friend unsigned long int CeilDiv (unsigned long int, unsigned long int); - friend int GetNumBits (unsigned long int); - - friend int C2I(char c); - -public: - BigNum(); - BigNum(unsigned long int); - BigNum(char *, char s = '+'); - BigNum(const BigNum &); - BigNum& operator= (const BigNum &); - ~BigNum(); - - unsigned long int b_get_ui() const; - unsigned long int Size() const; - unsigned long int * V() const; - char Sign() const; - BigNum EraseLeadingBits(unsigned long int); - unsigned long int GetTotalBits() const; - void b_clear(); - void b_print_w_sign(); - - //private: - unsigned long int * v; - unsigned long int size; - char sign; -}; - -#endif - -#if (__GNUC__ > 3) - -BigNum Set_ui (unsigned long int); -BigNum Set_si (signed long int); - -BigNum operator + (const BigNum &, const BigNum &); -BigNum operator + (const BigNum &, const unsigned long int); -BigNum operator - (const BigNum &, const BigNum &); -BigNum Sub4Div (const BigNum &, const BigNum &); -BigNum operator - (const BigNum &, const unsigned long int); -BigNum operator * (const BigNum &, const BigNum &); -BigNum operator * (const BigNum &, const unsigned long int); -BigNum operator / (const BigNum &, const BigNum &); -BigNum operator / (const BigNum &, const unsigned long int); -BigNum operator % (const BigNum &, const BigNum &); -BigNum operator % (const BigNum &, const unsigned long int); -BigNum operator ^ (const BigNum &, const BigNum &); -BigNum operator ^ (const BigNum &, const unsigned long int); -unsigned long int operator & (const BigNum &, - const unsigned long int); -BigNum operator >> (BigNum &, unsigned long int); -BigNum operator << (BigNum &, unsigned long int); -BigNum b_div_2exp (const BigNum &, const unsigned long int); -BigNum b_pow (const BigNum &, const unsigned long int); -BigNum b_powm (const BigNum &, const BigNum &, - const BigNum &); -BigNum b_powm (const BigNum &, const unsigned int, - const BigNum &); -BigNum b_abs (const BigNum &); -BigNum b_abs2 (const BigNum &); -BigNum b_neg (const BigNum &); -std::ostream & operator << (std::ostream &, const BigNum &); - -bool operator == (const BigNum &, const BigNum &); -bool operator == (const BigNum &, const unsigned long int); -int b_cmp (const BigNum &, const BigNum &); -int b_cmp (const BigNum &, const unsigned long int); -int b_cmp (const BigNum &, const signed long int); - -unsigned long int SmallerSize (const BigNum &, - const BigNum &); -unsigned long int BiggerSize (const BigNum &, - const BigNum &); -int Test (const unsigned long int, int); -unsigned long int Set (const unsigned long int, int); -unsigned long int Unset (const unsigned long int, int); -unsigned long int CeilDiv (unsigned long int, - unsigned long int); -int GetNumBits (unsigned long int); - -int C2I (char c); - -#endif - - -/*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ + +#ifndef BIGNUM_H +#define BIGNUM_H + +class BigNum +{ + friend BigNum Set_ui (unsigned long int); + friend BigNum Set_si (signed long int); + + friend BigNum operator + (const BigNum&, const BigNum&); + friend BigNum operator + (const BigNum&, const unsigned long int); + friend BigNum operator - (const BigNum&, const BigNum&); + friend BigNum Sub4Div (const BigNum&, const BigNum&); + friend BigNum operator - (const BigNum&, const unsigned long int); + friend BigNum operator * (const BigNum&, const BigNum&); + friend BigNum operator * (const BigNum&, const unsigned long int); + friend BigNum operator / (const BigNum&, const BigNum&); + friend BigNum operator / (const BigNum&, const unsigned long int); + friend BigNum operator % (const BigNum&, const BigNum&); + friend BigNum operator % (const BigNum&, const unsigned long int); + friend BigNum operator ^ (const BigNum&, const BigNum&); + friend BigNum operator ^ (const BigNum&, const unsigned long int); + friend unsigned long int operator & (const BigNum&, const unsigned long int); + friend BigNum operator >> (BigNum&, unsigned long int); + friend BigNum operator << (BigNum&, unsigned long int); + friend BigNum b_div_2exp (const BigNum&, const unsigned long int); + friend BigNum b_pow (const BigNum&, const unsigned long int); + friend BigNum b_powm (const BigNum&, const BigNum&, const BigNum&); + friend BigNum b_powm (const BigNum&, const unsigned int, const BigNum&); + friend BigNum b_abs (const BigNum&); + friend BigNum b_abs2 (const BigNum&); + friend BigNum b_neg (const BigNum&); + friend std::ostream& operator << (std::ostream&, const BigNum&); + + friend bool operator == (const BigNum&, const BigNum&); + friend bool operator == (const BigNum&, const unsigned long int); + friend int b_cmp (const BigNum&, const BigNum&); + friend int b_cmp (const BigNum&, const unsigned long int); + friend int b_cmp (const BigNum&, const signed long int); + + friend unsigned long int SmallerSize (const BigNum&, const BigNum&); + friend unsigned long int BiggerSize (const BigNum&, const BigNum&); + friend int Test (const unsigned long int, int); + friend unsigned long int Set (const unsigned long int, int); + friend unsigned long int Unset (const unsigned long int, int); + friend unsigned long int CeilDiv (unsigned long int, unsigned long int); + friend int GetNumBits (unsigned long int); + + friend int C2I (char c); + +public: + BigNum (); + BigNum (unsigned long int); + BigNum (char*, char s = '+'); + BigNum (const BigNum&); + BigNum& operator= (const BigNum&); + ~BigNum (); + + unsigned long int b_get_ui () const; + unsigned long int Size () const; + unsigned long int* V () const; + char Sign () const; + BigNum EraseLeadingBits (unsigned long int); + unsigned long int GetTotalBits () const; + void b_clear (); + void b_print_w_sign (); + + //private: + unsigned long int *v; + unsigned long int size; + char sign; +}; + +#endif + +#if (__GNUC__ > 3) + +BigNum Set_ui (unsigned long int); +BigNum Set_si (signed long int); + +BigNum operator + (const BigNum &, const BigNum &); +BigNum operator + (const BigNum &, const unsigned long int); +BigNum operator - (const BigNum &, const BigNum &); +BigNum Sub4Div (const BigNum &, const BigNum &); +BigNum operator - (const BigNum &, const unsigned long int); +BigNum operator * (const BigNum &, const BigNum &); +BigNum operator * (const BigNum &, const unsigned long int); +BigNum operator / (const BigNum &, const BigNum &); +BigNum operator / (const BigNum &, const unsigned long int); +BigNum operator % (const BigNum &, const BigNum &); +BigNum operator % (const BigNum &, const unsigned long int); +BigNum operator ^ (const BigNum &, const BigNum &); +BigNum operator ^ (const BigNum &, const unsigned long int); +unsigned long int operator & (const BigNum &, + const unsigned long int); +BigNum operator >> (BigNum &, unsigned long int); +BigNum operator << (BigNum &, unsigned long int); +BigNum b_div_2exp (const BigNum &, const unsigned long int); +BigNum b_pow (const BigNum &, const unsigned long int); +BigNum b_powm (const BigNum &, const BigNum &, + const BigNum &); +BigNum b_powm (const BigNum &, const unsigned int, + const BigNum &); +BigNum b_abs (const BigNum &); +BigNum b_abs2 (const BigNum &); +BigNum b_neg (const BigNum &); +std::ostream & operator << (std::ostream &, const BigNum &); + +bool operator == (const BigNum &, const BigNum &); +bool operator == (const BigNum &, const unsigned long int); +int b_cmp (const BigNum &, const BigNum &); +int b_cmp (const BigNum &, const unsigned long int); +int b_cmp (const BigNum &, const signed long int); + +unsigned long int SmallerSize (const BigNum &, + const BigNum &); +unsigned long int BiggerSize (const BigNum &, + const BigNum &); +int Test (const unsigned long int, int); +unsigned long int Set (const unsigned long int, int); +unsigned long int Unset (const unsigned long int, int); +unsigned long int CeilDiv (unsigned long int, + unsigned long int); +int GetNumBits (unsigned long int); + +int C2I (char c); + +#endif + +/*********************************************************************************** + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/include/cmrg.h sprng5/include/cmrg.h --- sprng5.orig/include/cmrg.h 2014-08-25 17:51:26.000000000 +0000 +++ sprng5/include/cmrg.h 2021-01-15 16:35:53.000000000 +0000 @@ -1,66 +1,66 @@ #ifndef _cmrg_h #define _cmrg_h -extern "C" { -class CMRG : public Sprng +extern "C" { - public: - - int init_rng (int, int, int, int); - CMRG(); - ~CMRG(); - CMRG (const CMRG &); - CMRG & operator= (const CMRG &); + class CMRG : public Sprng + { + public: - int get_rn_int (); - float get_rn_flt(); - double get_rn_dbl (); - int spawn_rng (int, Sprng ***); - int get_seed_rng (); - int free_rng (); - int pack_rng (char **); - int unpack_rng (char *); - int print_rng (); + int init_rng (int, int, int, int); + CMRG (); + ~CMRG (); + CMRG (const CMRG&); + CMRG& operator= (const CMRG&); - private: - int rng_type; - char *gentype; - int stream_number; - int nstreams; - int init_seed; - int parameter; - int narrays; - int *array_sizes; - int **arrays; - int spawn_offset; - /*** declare other variables here ***/ - unsigned int prime; + int get_rn_int (); + float get_rn_flt (); + double get_rn_dbl (); + int spawn_rng (int, Sprng***); + int get_seed_rng (); + int free_rng (); + int pack_rng (char**); + int unpack_rng (char*); + int print_rng (); + + private: + int rng_type; + char *gentype; + int stream_number; + int nstreams; + int init_seed; + int parameter; + int narrays; + int *array_sizes; + int **arrays; + int spawn_offset; + /*** declare other variables here ***/ + unsigned int prime; #ifdef LONG64 /* 64 bit integer types */ unsigned LONG64 state, multiplier; unsigned LONG64 s0, s1, s2, s3, s4; #else /* No 64 bit type available, so use array of floats */ - double state[3], multiplier[3];/* simulate 64 bit arithmetic */ - int s0, s1, s2, s3, s4; + double state[3], multiplier[3];/* simulate 64 bit arithmetic */ + int s0, s1, s2, s3, s4; #endif - /* -#if defined(CHECK_POINTERS) - spawn_rng(int, Sprng ***); -#endif - */ - inline void advance_state(); - inline void advance_cmrg(); -}; + /* + #if defined(CHECK_POINTERS) + spawn_rng(int, Sprng ***); + #endif + */ + inline void advance_state (); + inline void advance_cmrg (); + }; } #endif - - -/*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ + +/*********************************************************************************** + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/include/lcg.h sprng5/include/lcg.h --- sprng5.orig/include/lcg.h 2014-08-25 17:51:26.000000000 +0000 +++ sprng5/include/lcg.h 2021-01-15 16:37:37.000000000 +0000 @@ -1,28 +1,29 @@ #ifndef _lcg_h #define _lcg_h -extern "C" { -class LCG : public Sprng +extern "C" { - public: + class LCG : public Sprng + { + public: - LCG(); - int init_rng(int, int, int, int); - ~LCG(); - LCG (const LCG &); - LCG & operator= (const LCG &); + LCG (); + int init_rng (int, int, int, int); + ~LCG (); + LCG (const LCG&); + LCG& operator= (const LCG&); - int get_rn_int (); - float get_rn_flt (); - double get_rn_dbl (); - int spawn_rng (int nspawned, Sprng ***newgens); - int get_seed_rng (); - int free_rng (); - int pack_rng (char **buffer); - int unpack_rng (char *packed); - int print_rng (); + int get_rn_int (); + float get_rn_flt (); + double get_rn_dbl (); + int spawn_rng (int nspawned, Sprng ***newgens); + int get_seed_rng (); + int free_rng (); + int pack_rng (char **buffer); + int unpack_rng (char *packed); + int print_rng (); - private: + private: #ifdef LONG64 int rng_type; @@ -38,33 +39,32 @@ inline void multiply(); #else - int rng_type; - int seed[2]; - int init_seed; - int prime; - int prime_position; - int prime_next; - char *gentype; - int parameter; - int *multiplier; + int rng_type; + int seed[2]; + int init_seed; + int prime; + int prime_position; + int prime_next; + char *gentype; + int parameter; + int *multiplier; - inline void multiply(int *, int *, int *); - + inline void multiply (int*, int*, int*); + #endif - void advance_seed(); -}; + void advance_seed (); + }; } #endif - - -/*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ + +/*********************************************************************************** + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/include/lcg64.h sprng5/include/lcg64.h --- sprng5.orig/include/lcg64.h 2014-08-25 17:51:26.000000000 +0000 +++ sprng5/include/lcg64.h 2021-01-15 16:37:36.000000000 +0000 @@ -1,62 +1,61 @@ #ifndef _lcg64_h #define _lcg64_h -extern "C" { - -class LCG64 : public Sprng +extern "C" { - public: - int init_rng(int, int, int, int); - LCG64(); - ~LCG64(); - LCG64 (const LCG64 &); - LCG64 & operator = (const LCG64 &); - int get_rn_int (); - float get_rn_flt (); - double get_rn_dbl (); - int spawn_rng (int, Sprng ***); - int get_seed_rng (); - int free_rng (); - int pack_rng (char **); - int unpack_rng (char *); - int print_rng (); + class LCG64 : public Sprng + { + public: - private: + int init_rng (int, int, int, int); + LCG64 (); + ~LCG64 (); + LCG64 (const LCG64&); + LCG64& operator = (const LCG64&); + int get_rn_int (); + float get_rn_flt (); + double get_rn_dbl (); + int spawn_rng (int, Sprng***); + int get_seed_rng (); + int free_rng (); + int pack_rng (char**); + int unpack_rng (char*); + int print_rng (); - int rng_type; - char *gentype; - int stream_number; - int nstreams; - int init_seed; - int parameter; - int narrays; - int *array_sizes; - int **arrays; - int spawn_offset; - /*** declare other variables here ***/ - unsigned int prime; + private: + int rng_type; + char *gentype; + int stream_number; + int nstreams; + int init_seed; + int parameter; + int narrays; + int *array_sizes; + int **arrays; + int spawn_offset; + /*** declare other variables here ***/ + unsigned int prime; + #ifdef LONG64 /* 64 bit integer types */ unsigned LONG64 state, multiplier; #else /* No 64 bit type available, so use array of floats */ - double state[3], multiplier[3];/* simulate 64 bit arithmetic */ + double state[3], multiplier[3];/* simulate 64 bit arithmetic */ #endif - inline void advance_state(); -}; + inline void advance_state (); + }; } - #endif - - -/*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ + +/*********************************************************************************** + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/include/lfg.h sprng5/include/lfg.h --- sprng5.orig/include/lfg.h 2014-08-25 17:51:26.000000000 +0000 +++ sprng5/include/lfg.h 2021-01-15 16:37:38.000000000 +0000 @@ -1,58 +1,58 @@ #ifndef _lfg_h #define _lfg_h -extern "C" { -class LFG : public Sprng +extern "C" { - public: - - LFG(); - int init_rng (int, int, int, int); - ~LFG(); - LFG (const LFG &); - LFG & operator= (const LFG &); + class LFG : public Sprng + { + public: - int get_rn_int(); - float get_rn_flt (); - double get_rn_dbl (); - int spawn_rng (int nspawned, Sprng ***); - int get_seed_rng (); - int free_rng (); - int pack_rng (char **); - int unpack_rng (char *); - int print_rng (); + LFG (); + int init_rng (int, int, int, int); + ~LFG (); + LFG (const LFG&); + LFG& operator= (const LFG&); - /* data members public for static linkage */ + int get_rn_int (); + float get_rn_flt (); + double get_rn_dbl (); + int spawn_rng (int nspawned, Sprng***); + int get_seed_rng (); + int free_rng (); + int pack_rng (char**); + int unpack_rng (char*); + int print_rng (); - int rng_type; - char *gentype; - unsigned *si; /* sets next branch seed */ - unsigned *r0; /* pointer to the even generator */ - unsigned *r1; /* pointer to the odd generator */ - int stream_number; - int hptr; /* integer pointer into fill */ - int seed; - int init_seed; - int lval, kval; - int param; + /* data members public for static linkage */ - private: - int get_hptr_rng(); - int * get_fill_rng(); - int * get_next_index_rng(); - int * get_node_index_rng(); -}; + int rng_type; + char *gentype; + unsigned *si; /* sets next branch seed */ + unsigned *r0; /* pointer to the even generator */ + unsigned *r1; /* pointer to the odd generator */ + int stream_number; + int hptr; /* integer pointer into fill */ + int seed; + int init_seed; + int lval, kval; + int param; + + private: + int get_hptr_rng (); + int* get_fill_rng (); + int* get_next_index_rng (); + int* get_node_index_rng (); + }; } #endif - - -/*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ + +/*********************************************************************************** + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/include/mlfg.h sprng5/include/mlfg.h --- sprng5.orig/include/mlfg.h 2014-08-25 17:51:26.000000000 +0000 +++ sprng5/include/mlfg.h 2021-01-15 16:35:51.000000000 +0000 @@ -3,59 +3,60 @@ //#include "int64.h" -extern "C" { -class MLFG : public Sprng +extern "C" { - public: + class MLFG : public Sprng + { + public: - MLFG(); - int init_rng(int, int, int, int); - ~MLFG(); - MLFG(const MLFG &); - MLFG & operator= (const MLFG &); + MLFG (); + int init_rng (int, int, int, int); + ~MLFG (); + MLFG (const MLFG&); + MLFG& operator= (const MLFG&); - int get_rn_int(); - float get_rn_flt(); - double get_rn_dbl(); - int spawn_rng(int, Sprng ***); - int get_seed_rng(); - int free_rng(); - int pack_rng(char **); - int unpack_rng (char *); - int print_rng (); + int get_rn_int (); + float get_rn_flt (); + double get_rn_dbl (); + int spawn_rng (int, Sprng***); + int get_seed_rng (); + int free_rng (); + int pack_rng (char**); + int unpack_rng (char*); + int print_rng (); - int rng_type; - char *gentype; - int stream_number; - int nstreams; - int init_seed; - int parameter; - int narrays; - int *array_sizes; - int **arrays; + int rng_type; + char *gentype; + int stream_number; + int nstreams; + int init_seed; + int parameter; + int narrays; + int *array_sizes; + int **arrays; #ifdef LONG64 typedef unsigned LONG64 uint64; #else - typedef unsigned int uint64[2]; + typedef unsigned int uint64[2]; #endif - - uint64 *lags; - uint64 *si; - int hptr; /* integer pointer into fill */ - int lval, kval, seed; - - inline void advance_state(); -}; + + uint64 *lags; + uint64 *si; + int hptr; /* integer pointer into fill */ + int lval, kval, seed; + + inline void advance_state (); + }; } -#endif - -/*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ +#endif + +/*********************************************************************************** + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/include/pmlcg.h sprng5/include/pmlcg.h --- sprng5.orig/include/pmlcg.h 2014-08-25 17:51:26.000000000 +0000 +++ sprng5/include/pmlcg.h 2021-01-15 16:35:53.000000000 +0000 @@ -3,56 +3,56 @@ #include "bignum.h" -extern "C" { -class PMLCG : public Sprng +extern "C" { - public: + class PMLCG : public Sprng + { + public: - PMLCG(); - int init_rng(int, int, int, int); - ~PMLCG(); - PMLCG(const PMLCG &); - PMLCG & operator= (const PMLCG &); + PMLCG (); + int init_rng (int, int, int, int); + ~PMLCG (); + PMLCG (const PMLCG&); + PMLCG& operator= (const PMLCG&); - int get_rn_int(); - float get_rn_flt(); - double get_rn_dbl(); - int spawn_rng(int, Sprng ***); - int get_seed_rng(); - int free_rng(); - int pack_rng(char **); - int unpack_rng (char *); - int print_rng (); + int get_rn_int (); + float get_rn_flt (); + double get_rn_dbl (); + int spawn_rng (int, Sprng***); + int get_seed_rng (); + int free_rng (); + int pack_rng (char**); + int unpack_rng (char*); + int print_rng (); - void iterate(); + void iterate (); - int rng_type; - char *gentype; - int stream_number; - int nstreams; - int init_seed; - int parameter; - int narrays; - /*** declare other variables here ***/ + int rng_type; + char *gentype; + int stream_number; + int nstreams; + int init_seed; + int parameter; + int narrays; + /*** declare other variables here ***/ #ifdef LONG64 unsigned LONG64 mult, x; #else - unsigned long r[2], a[2]; - int a_size; /* length of array 'a' */ + unsigned long r[2], a[2]; + int a_size; /* length of array 'a' */ #endif - BigNum k, si; -}; + BigNum k, si; + }; } #endif - - -/*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ + +/*********************************************************************************** + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/include/sprng.h sprng5/include/sprng.h --- sprng5.orig/include/sprng.h 2014-08-25 17:51:26.000000000 +0000 +++ sprng5/include/sprng.h 2021-01-15 16:35:52.000000000 +0000 @@ -77,9 +77,12 @@ class Sprng { - public: +public: - virtual ~Sprng(){}; + virtual ~Sprng () + { + } + ; virtual int init_rng (int, int, int, int) = 0; virtual int get_rn_int () = 0; virtual float get_rn_flt () = 0; @@ -89,13 +92,13 @@ virtual int free_rng () = 0; virtual int pack_rng (char **buffer) = 0; virtual int print_rng () = 0; - virtual int unpack_rng(char *packed) = 0; + virtual int unpack_rng (char *packed) = 0; }; int make_new_seed (); -int *init_rng_simple (int seed, int mult, int gtype = 0); -int *init_rng_simple_mpi (int seed, int mult, int gtype = 0); +int* init_rng_simple (int seed, int mult, int gtype = 0); +int* init_rng_simple_mpi (int seed, int mult, int gtype = 0); int get_rn_int_simple (); int get_rn_int_simple_mpi (); float get_rn_flt_simple (); @@ -103,21 +106,18 @@ double get_rn_dbl_simple (); double get_rn_dbl_simple_mpi (); int pack_rng_simple (char **buffer); -int *unpack_rng_simple (char *packed, int gtype); +int* unpack_rng_simple (char *packed, int gtype); int print_rng_simple (); int make_new_seed_mpi (); - #endif - - -/*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ +/*********************************************************************************** + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/include/sprng_cpp.h sprng5/include/sprng_cpp.h --- sprng5.orig/include/sprng_cpp.h 2014-08-25 17:51:26.000000000 +0000 +++ sprng5/include/sprng_cpp.h 2021-01-15 16:35:51.000000000 +0000 @@ -13,17 +13,16 @@ #include "mlfg.h" #include "pmlcg.h" -Sprng * SelectType(int typenum); +Sprng* SelectType (int typenum); #endif - - -/*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ + +/*********************************************************************************** + * SPRNG (c) 2014 by Florida State University * + * * + * SPRNG is licensed under a * + * Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * + * * + * You should have received a copy of the license along with this * + * work. If not, see . * + ************************************************************************************/ diff -urN sprng5.orig/include/sprng_f.h sprng5/include/sprng_f.h --- sprng5.orig/include/sprng_f.h 2014-08-25 17:51:26.000000000 +0000 +++ sprng5/include/sprng_f.h 2021-05-18 00:01:38.000000000 +0000 @@ -145,14 +145,14 @@ #endif - - -/*********************************************************************************** -* SPRNG (c) 2014 by Florida State University * -* * -* SPRNG is licensed under a * -* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * -* * -* You should have received a copy of the license along with this * -* work. If not, see . * -************************************************************************************/ + + +/*********************************************************************************** +* SPRNG (c) 2014 by Florida State University * +* * +* SPRNG is licensed under a * +* Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. * +* * +* You should have received a copy of the license along with this * +* work. If not, see . * +************************************************************************************/ diff -urN sprng5.orig/lib/Makefile.in sprng5/lib/Makefile.in --- sprng5.orig/lib/Makefile.in 2018-07-21 19:48:27.000000000 +0000 +++ sprng5/lib/Makefile.in 2021-06-08 16:40:22.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -196,6 +196,7 @@ MKDIR_P = @MKDIR_P@ MPICXX = @MPICXX@ MPIF77 = @MPIF77@ +MPI_CXXLIB = @MPI_CXXLIB@ MPI_DEF = @MPI_DEF@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@